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); 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: $

Outstanding: $

Tenure:

Frequency:


Installment Amount Date Payment Date Payment Status Action
$

Additional Payment Details

Amount Payment Date Transaction Id Remarks
$