diff --git a/customers/.hta_slug/billing-details.php b/customers/.hta_slug/billing-details.php index 9dccf64..e033ae6 100644 --- a/customers/.hta_slug/billing-details.php +++ b/customers/.hta_slug/billing-details.php @@ -12,8 +12,9 @@ $adPaymentSource = $_POST['adPaymentSource']; $adPaymentTran = $_POST['adPaymentTran']; $adPaymentRemarks = $_POST['adPaymentRemarks']; + // Insert additional payment record - try{ + 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); @@ -22,61 +23,130 @@ $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){ + $stmt3->execute(); + echo '
Additional Payment ' . htmlspecialchars($_POST['adPaymentAmount']) . ' applied successfully.
'; + } catch(PDOException $e) { echo '
Error: ' . $e->getMessage() . '
'; } - } - if ($_SERVER['REQUEST_METHOD'] === 'POST') { - $adPaymentAmount = floatval($_POST['adPaymentAmount']); + // Apply additional payment to EMIs (starting from furthest future EMI) 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"); + // 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); - if (!$emiRecords) { - echo '
No EMI records found.
'; - exit; - } - $remainingAmount = $adPaymentAmount; - foreach ($emiRecords as $index => &$emi) { + + foreach ($emiRecords as $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; + // Full payment $remainingAmount -= $emiAmount; - $newEmiAmount = 0; // EMI is fully paid + $newEmiAmount = 0; + $payStatus = 1; } else { - // If additional amount is less than EMI, reduce this EMI - $payAmount = $remainingAmount; + // Partial payment $newEmiAmount = $emiAmount - $remainingAmount; - $remainingAmount = 0; // No more amount left to deduct + $remainingAmount = 0; + $payStatus = 0; // Still partially unpaid } - // 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"); + // 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 { diff --git a/test.php b/test.php new file mode 100644 index 0000000..ecbc173 --- /dev/null +++ b/test.php @@ -0,0 +1,84 @@ +setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + +$customerId = $_GET['customerId']; +$invoiceId = $_GET['invoiceId']; + +// Handle Additional Payment +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() . '
'; + } +} + +// [Rest of your existing code for handling EMI status updates and data fetching...] +?> + + \ No newline at end of file