setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$customerId = $_GET['customerId'];
$invoiceId = $_GET['invoiceId'];
if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['additional-payment'])){
$adPaymentAmount = floatval($_POST['adPaymentAmount']);
$adPaymentDate = $_POST['adPaymentDate'];
$adPaymentSource = $_POST['adPaymentSource'];
$adPaymentTran = $_POST['adPaymentTran'];
$adPaymentRemarks = $_POST['adPaymentRemarks'];
// Insert additional payment record
try {
$stmt3 = $db->prepare("INSERT INTO emi (customerId, invoiceId, adPaymentAmount, adPaymentDate, adPaymentSource, adPaymentTran, adPaymentRemarks, payStatus) VALUES (:customerId, :invoiceId, :adPaymentAmount, :adPaymentDate, :adPaymentSource, :adPaymentTran, :adPaymentRemarks, 1)");
$stmt3->bindParam(':customerId', $customerId);
$stmt3->bindParam(':invoiceId', $invoiceId);
$stmt3->bindParam(':adPaymentAmount', $adPaymentAmount);
$stmt3->bindParam(':adPaymentDate', $adPaymentDate);
$stmt3->bindParam(':adPaymentSource', $adPaymentSource);
$stmt3->bindParam(':adPaymentTran', $adPaymentTran);
$stmt3->bindParam(':adPaymentRemarks', $adPaymentRemarks);
$stmt3->execute();
echo '
Additional Payment ' . htmlspecialchars($_POST['adPaymentAmount']) . ' applied successfully.
';
} catch(PDOException $e) {
echo 'Error: ' . $e->getMessage() . '
';
}
// Apply additional payment to EMIs (starting from furthest future EMI)
try {
// Get all unpaid EMIs ordered by date DESC (furthest future first)
$stmt = $db->prepare("SELECT * FROM emi WHERE customerId = :customerId AND invoiceId = :invoiceId AND emiAmount > 0 AND payStatus = 0 ORDER BY emiDate DESC");
$stmt->bindParam(':customerId', $customerId);
$stmt->bindParam(':invoiceId', $invoiceId);
$stmt->execute();
$emiRecords = $stmt->fetchAll(PDO::FETCH_ASSOC);
$remainingAmount = $adPaymentAmount;
foreach ($emiRecords as $emi) {
if ($remainingAmount <= 0) break;
$emiId = $emi['id'];
$emiAmount = floatval($emi['emiAmount']);
if ($remainingAmount >= $emiAmount) {
// Full payment
$remainingAmount -= $emiAmount;
$newEmiAmount = 0;
$payStatus = 1;
} else {
// Partial payment
$newEmiAmount = $emiAmount - $remainingAmount;
$remainingAmount = 0;
$payStatus = 0; // Still partially unpaid
}
// Update EMI
$updateStmt = $db->prepare("UPDATE emi SET emiAmount = :newEmiAmount, payStatus = :payStatus, paymentDate = CASE WHEN :payStatus = 1 THEN :paymentDate ELSE paymentDate END WHERE id = :emiId");
$updateStmt->bindParam(':newEmiAmount', $newEmiAmount);
$updateStmt->bindParam(':payStatus', $payStatus);
$updateStmt->bindParam(':paymentDate', $adPaymentDate);
$updateStmt->bindParam(':emiId', $emiId);
$updateStmt->execute();
}
// If there's remaining amount after processing all unpaid EMIs
if ($remainingAmount > 0) {
echo 'Note: $' . number_format($remainingAmount, 2) . ' was not applied (no unpaid EMIs remaining)
';
}
} catch (PDOException $e) {
echo 'Error: ' . $e->getMessage() . '
';
}
}
// if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['additional-payment'])){
// $adPaymentAmount = floatval($_POST['adPaymentAmount']);
// $adPaymentDate = $_POST['adPaymentDate'];
// $adPaymentSource = $_POST['adPaymentSource'];
// $adPaymentTran = $_POST['adPaymentTran'];
// $adPaymentRemarks = $_POST['adPaymentRemarks'];
// // Insert additional payment record
// try{
// $stmt3 = $db->prepare("INSERT INTO emi (customerId, invoiceId, adPaymentAmount, adPaymentDate, adPaymentSource, adPaymentTran, adPaymentRemarks, payStatus) VALUES (:customerId, :invoiceId, :adPaymentAmount, :adPaymentDate, :adPaymentSource, :adPaymentTran, :adPaymentRemarks, 1)");
// $stmt3->bindParam(':customerId', $customerId);
// $stmt3->bindParam(':invoiceId', $invoiceId);
// $stmt3->bindParam(':adPaymentAmount', $adPaymentAmount);
// $stmt3->bindParam(':adPaymentDate', $adPaymentDate);
// $stmt3->bindParam(':adPaymentSource', $adPaymentSource);
// $stmt3->bindParam(':adPaymentTran', $adPaymentTran);
// $stmt3->bindParam(':adPaymentRemarks', $adPaymentRemarks);
// if ($stmt3->execute()) {
// echo 'Additional Payment ' . htmlspecialchars($_POST['adPaymentAmount']) . ' applied successfully.
';
// } else {
// echo 'Failed to record the additional payment.
';
// }
// }catch(PDOException $e){
// echo 'Error: ' . $e->getMessage() . '
';
// }
// }
// if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// $adPaymentAmount = floatval($_POST['adPaymentAmount']);
// try {
// // Fetch EMIs of the customer (Assuming we have emiNumber in ascending order)
// $stmt = $db->prepare("SELECT * FROM emi WHERE customerId = :customerId AND invoiceId = :invoiceId ORDER BY emiNumber DESC");
// $stmt->bindParam(':customerId', $customerId);
// $stmt->bindParam(':invoiceId', $invoiceId);
// $stmt->execute();
// $emiRecords = $stmt->fetchAll(PDO::FETCH_ASSOC);
// if (!$emiRecords) {
// echo 'No EMI records found.
';
// exit;
// }
// $remainingAmount = $adPaymentAmount;
// foreach ($emiRecords as $index => &$emi) {
// if ($remainingAmount <= 0) break;
// $emiId = $emi['id'];
// $emiAmount = floatval($emi['emiAmount']);
// if ($remainingAmount >= $emiAmount) {
// // If additional amount is greater or equal to EMI, pay it off
// $payAmount = $emiAmount;
// $remainingAmount -= $emiAmount;
// $newEmiAmount = 0; // EMI is fully paid
// } else {
// // If additional amount is less than EMI, reduce this EMI
// $payAmount = $remainingAmount;
// $newEmiAmount = $emiAmount - $remainingAmount;
// $remainingAmount = 0; // No more amount left to deduct
// }
// // Update EMI record with reduced amount
// $updateStmt = $db->prepare("UPDATE emi SET emiAmount = :newEmiAmount, payStatus = CASE WHEN emiAmount = 0 THEN 1 ELSE 0 END WHERE id = :emiId");
// $updateStmt->bindParam(':newEmiAmount', $newEmiAmount);
// $updateStmt->bindParam(':emiId', $emiId);
// $updateStmt->execute();
// }
// } catch (PDOException $e) {
// echo 'Error: ' . $e->getMessage() . '
';
// }
// }
try {
$stmt = $db->prepare("SELECT * FROM invoice WHERE customerId = :customerId AND invoiceId = :invoiceId");
$stmt->bindParam(':invoiceId', $_GET['invoiceId']);
$stmt->bindParam(':customerId', $_GET['customerId']);
$stmt->execute();
$invoiceData = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt2 = $db->prepare("SELECT * FROM emi WHERE customerId = :customerId");
$stmt2->bindParam(':customerId', $_GET['customerId']);
$stmt2->execute();
$emiData = $stmt2->fetch(PDO::FETCH_ASSOC);
// var_dump($emiData);
} catch (PDOException $e) {
echo 'Error: ' . $e->getMessage() . '
';
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['emiId'], $_POST['payStatus'], )) {
header('Content-Type: application/json');
ob_end_clean(); // Clears any accidental HTML output
try {
$stmt = $db->prepare("UPDATE emi SET payStatus = :payStatus, paymentDate = :paymentDate WHERE customerId = :customerId AND id = :emiId");
$stmt->bindParam(':customerId', $_GET['customerId']);
$stmt->bindParam(':payStatus', $_POST['payStatus'], PDO::PARAM_INT);
$stmt->bindParam(':emiId', $_POST['emiId'], PDO::PARAM_INT);
$stmt->bindParam(':paymentDate', $_POST['paymentDate']);
$stmt->execute();
// Ensure no previous output before JSON
echo json_encode(['status' => 'success']);
exit; // Terminate script after sending JSON
} catch (PDOException $e) {
echo json_encode(['status' => 'error', 'message' => $e->getMessage()]);
exit;
}
}
try {
// Fetch EMI data
$stmt = $db->prepare("SELECT * FROM emi WHERE customerId = :customerId AND invoiceId = :invoiceId ORDER BY emiDate ASC");
$stmt->bindParam(':customerId', $_GET['customerId']);
$stmt->bindParam(':invoiceId', $_GET['invoiceId']);
$stmt->execute();
$emiPlans = $stmt->fetchAll(PDO::FETCH_ASSOC);
// var_dump($emiPlans);
$stmt = $db->prepare("SELECT * FROM customers WHERE customerId = :customerId");
$stmt->bindParam(':customerId', $_GET['customerId']);
$stmt->execute();
$customer = $stmt->fetch(PDO::FETCH_ASSOC);
// var_dump($customer);
} catch (PDOException $e) {
die('Error: ' . $e->getMessage() . '
');
}
$currentOutstanding = 0;
$totalAmount = 0;
$bookingDate = null;
$currentOutstanding = 0;
$totalAmount = 0;
$bookingDate = null;
$tenure = null;
$frequency = null;
foreach ($emiPlans as $emi) {
$totalAmount = $emi['totalAmount'];
if ($bookingDate === null && !empty($emi['bookingDate'])) {
$bookingDate = $emi['bookingDate'];
}
if ($emi['payStatus'] == 0) {
$currentOutstanding += $emi['emiAmount'];
}
if ($tenure === null && isset($emi['tenure'])) {
$tenure = $emi['tenure'];
}
if ($frequency === null && isset($emi['frequency'])) {
$frequency = $emi['frequency'];
}
}
$currentOutstanding = round($currentOutstanding);
$tenure = $tenure !== null ? $tenure : 0;
$frequency = $frequency !== null ? $frequency : 0;
?>
Installment Details
Customer Name:
Mobile Number:
Installment Start Date:
Invoice Id:
Email:
Total Amount: $
Discount Amount: $
Effective Amount: $
Outstanding: $
Tenure:
Frequency:
Additional Payment Details
Amount |
Payment Date |
Transaction Id |
Remarks |
$= $emi['adPaymentAmount']; ?> |
= date("m/d/Y", strtotime($emi['adPaymentDate'])); ?> |
= $emi['adPaymentTran']; ?> |
= $emi['adPaymentRemarks']; ?> |