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:


Installment Amount Date Payment Date Status Action
$

Additional Payment Details

Amount Payment Date Transaction Id Remarks
$