s1
This commit is contained in:
@@ -64,11 +64,14 @@ require_login();
|
||||
<li><a href="/Admin/Add_group">Add New Group</a></li>
|
||||
<li><a href="/Admin/View_AC?Type=Recurring">View A/C</a></li>
|
||||
<li><a href="/Admin/Trans_New">Transaction</a></li>
|
||||
<li><a href="/Admin/Due">Deemand Sheet</a></li>
|
||||
<li><a href="/Admin/Report">Report</a></li>
|
||||
<li><a href="/Admin/Due">Due</a></li>
|
||||
<li><a href="/Admin/Revert">Revert</a></li>
|
||||
<li><a href="/Admin/agent_View_report">Commission</a></li>
|
||||
<li><a href="/Admin/Settings_Agent">Agent Settings</a></li>
|
||||
<!-- <li><a href="/Admin/Revert">Revert</a></li> -->
|
||||
<?php
|
||||
if($_SESSION['type'] === 'admin'){ ?>
|
||||
<li><a href="/Admin/agent_View_report">Commission</a></li>
|
||||
<li><a href="/Admin/Settings_Agent">Agent Settings</a></li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
|
||||
@@ -1,75 +1,120 @@
|
||||
<div class="container">
|
||||
<div class="text-right mb-3" style="margin-bottom: 15px;">
|
||||
<button id="downloadPdf" class="btn btn-primary">Download Deemand Sheet</button>
|
||||
<div class="text-right mb-3" style="margin-bottom: 15px;">
|
||||
<button id="downloadPdf" class="btn btn-primary">Download Demand Sheet</button>
|
||||
</div>
|
||||
|
||||
<table class="table table-striped table-bordered table-hover table-responsive">
|
||||
<tr>
|
||||
<th>SL</th>
|
||||
<th>Type</th>
|
||||
<th>AC No</th>
|
||||
<th>Name</th>
|
||||
<th>Mobile</th>
|
||||
<th>Account Creation Date</th>
|
||||
<th>Maturity Value</th>
|
||||
<th>Balance</th>
|
||||
<th>No Of Installment</th>
|
||||
<th>No Of Paid Installment</th>
|
||||
<th>Installment Amount</th>
|
||||
<th>Total Due Amount</th>
|
||||
</tr>
|
||||
<?php
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) {
|
||||
die("Connection failed: " . $conn->connect_error);
|
||||
}
|
||||
|
||||
$agent_id = $_SESSION['user_id'];
|
||||
if ($_SESSION['type'] === 'admin') {
|
||||
$sql = "SELECT * FROM `" . $GLOBALS['arif_ac'] . "` WHERE `AA_BAL` < 0 ORDER BY `AA_ID` DESC";
|
||||
<?php
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
|
||||
|
||||
$agent_id = $_SESSION['user_id'];
|
||||
$types = ['Loan', 'Recurring'];
|
||||
$pdfData = [];
|
||||
$sl = 1;
|
||||
|
||||
// Grand total for PDF
|
||||
$grandTotal = [
|
||||
'accounts' => 0,
|
||||
'paidInstallments' => 0,
|
||||
'dueInstallments' => 0,
|
||||
'dueAmount' => 0
|
||||
];
|
||||
|
||||
foreach($types as $type){
|
||||
$typeLike = "%$type%";
|
||||
if($_SESSION['type']==='admin'){
|
||||
$sql = "SELECT * FROM `" . $GLOBALS['arif_ac'] . "` WHERE `AA_TYPE` LIKE ? AND (`STATUS` IS NULL OR `STATUS`!='closed') ORDER BY `AA_ID` DESC";
|
||||
$stmt = $conn->prepare($sql);
|
||||
} elseif ($_SESSION['type'] === 'agent') {
|
||||
$sql = "SELECT * FROM `" . $GLOBALS['arif_ac'] . "` WHERE `AA_BAL` < 0 AND `AA_AGENT` = ? ORDER BY `AA_ID` DESC";
|
||||
$stmt->bind_param("s", $typeLike);
|
||||
} elseif($_SESSION['type']==='agent'){
|
||||
$sql = "SELECT * FROM `" . $GLOBALS['arif_ac'] . "` WHERE `AA_TYPE` LIKE ? AND (`STATUS` IS NULL OR `STATUS`!='closed') AND `AA_AGENT`=? ORDER BY `AA_ID` DESC";
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->bind_param("s", $agent_id);
|
||||
$stmt->bind_param("ss", $typeLike, $agent_id);
|
||||
}
|
||||
|
||||
$stmt->execute();
|
||||
$result = $stmt->get_result();
|
||||
$pdfData = [];
|
||||
if ($result->num_rows > 0) {
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
//$ID=$row["GC_ID"];
|
||||
$tt = $row["AA_ID"] - 10;
|
||||
echo "
|
||||
<tr>
|
||||
<td>" . $tt . "</td>
|
||||
<td>" . $row["AA_ACTYPE"] . "," . $row["AA_TYPE"] . "</td>
|
||||
<td><a href='./Details?no=" . $row["AA_ACNO"] . "&type=" . $row["AA_TYPE"] . "'>" . $row["AA_ACNO"] . "</a> <a href='./Trans_New?no=" . $row["AA_ACNO"] . "&type=" . $row["AA_TYPE"] . "'>Transact</a></td>
|
||||
<td>" . $row["AA_NAME"] . "</td>
|
||||
<td>" . $row["AA_DATE"] . "</td>
|
||||
<td>" . $row["AA_MATURE_VALUE"] . "</td>
|
||||
<td>" . $row["AA_BAL"] . "</td>
|
||||
<td>" . $row["AA_NO_OF_PAYMENT"] . "</td>
|
||||
<td>" . $row["AA_NO_OF_PAYPAID"] . "</td>
|
||||
<td>" . $row["AA_INSTALLMENT"] . "</td>
|
||||
</tr>";
|
||||
$pdfData[] = [
|
||||
$tt,
|
||||
$row["AA_ACTYPE"] . "," . $row["AA_TYPE"],
|
||||
$row["AA_ACNO"],
|
||||
$row["AA_NAME"],
|
||||
$row["AA_DATE"],
|
||||
$row["AA_MATURE_VALUE"],
|
||||
$row["AA_BAL"],
|
||||
$row["AA_NO_OF_PAYMENT"],
|
||||
$row["AA_NO_OF_PAYPAID"],
|
||||
$row["AA_INSTALLMENT"]
|
||||
];
|
||||
}
|
||||
} else {
|
||||
echo "0 results";
|
||||
};
|
||||
$conn->close();
|
||||
?>
|
||||
|
||||
if($result->num_rows>0){
|
||||
echo "<tr><td colspan='11' style='text-align:center; font-weight:bold; background:#f0f0f0;'>$type Demand</td></tr>";
|
||||
|
||||
while($row = $result->fetch_assoc()){
|
||||
$totalDueAmt = $row['AA_BAL'];
|
||||
|
||||
|
||||
if ($row['AA_INSTALLMENT'] > 0) {
|
||||
$paidInst = ($row['AA_MATURE_VALUE'] + $row['AA_BAL']) / $row['AA_INSTALLMENT'];
|
||||
$paidInst = number_format($paidInst, 2);
|
||||
|
||||
$remainInst = abs($row['AA_BAL']) / $row['AA_INSTALLMENT'];
|
||||
$remainInst = number_format($remainInst, 2);
|
||||
} else {
|
||||
$paidInst = 0; // বা অন্য লজিক
|
||||
$remainInst = 0;
|
||||
}
|
||||
// echo $row['AA_BAL'] . ' : ' . $row['AA_INSTALLMENT'];
|
||||
// HTML table row
|
||||
echo "<tr>
|
||||
<td>".$sl."</td>
|
||||
<td>".$row['AA_TYPE']."</td>
|
||||
<td>".$row['AA_ACNO']."</td>
|
||||
<td>".$row['AA_NAME']."</td>
|
||||
<td>".$row['AA_PHONE']."</td>
|
||||
<td>".$row['AA_DATE']."</td>
|
||||
<td>".$row['AA_MATURE_VALUE']."</td>
|
||||
<td>".$row['AA_BAL']."</td>
|
||||
<td>".$remainInst."</td>
|
||||
<td>".$paidInst."</td>
|
||||
<td>".$row['AA_INSTALLMENT']."</td>
|
||||
<td>".$totalDueAmt."</td>
|
||||
</tr>";
|
||||
|
||||
// PDF simplified row
|
||||
$pdfData[] = [
|
||||
$type,
|
||||
$sl,
|
||||
$row['AA_NAME'], // NAME OF ACCOUNT HOLDER
|
||||
$row['AA_PHONE'], // MOBILE NO (blank)
|
||||
$row['AA_ACNO'], // ACCOUNT NO
|
||||
$paidInst, // NO OF INSTALLMENT PAID
|
||||
$remainInst, // NO OF INSTALLMENT DUE
|
||||
$row['AA_INSTALLMENT'], // EMI AMOUNT
|
||||
$totalDueAmt, // TOTAL DUE AMOUNT
|
||||
"" // CUSTOMER SIGNATURE
|
||||
];
|
||||
|
||||
// Update grand total
|
||||
$grandTotal['accounts']++;
|
||||
$grandTotal['paidInstallments'] += $paidInst;
|
||||
$grandTotal['dueInstallments'] += $remainInst;
|
||||
$grandTotal['dueAmount'] += $totalDueAmt;
|
||||
|
||||
$sl++;
|
||||
|
||||
// echo $dueInst . '<br>';
|
||||
}
|
||||
}
|
||||
}
|
||||
$conn->close();
|
||||
|
||||
?>
|
||||
</table>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.28/jspdf.plugin.autotable.min.js"></script>
|
||||
|
||||
@@ -80,92 +125,102 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
const doc = new jsPDF('p', 'pt', 'a4');
|
||||
|
||||
const userType = "<?php echo $_SESSION['type']; ?>";
|
||||
const userName = "<?php echo $_SESSION['user_id']; ?>";
|
||||
const userName = "<?php echo $_SESSION['name']; ?>";
|
||||
const now = new Date();
|
||||
const dateTime = now.toLocaleDateString() + " " + now.toLocaleTimeString();
|
||||
const titleText = "Grafin Ventures Demand Sheet";
|
||||
|
||||
let titleText = (userType === 'admin')
|
||||
? "Full Demand Sheet"
|
||||
: `Agent Demand Sheet (Agent ID: ${userName})`;
|
||||
|
||||
const tableData = <?php echo json_encode($pdfData); ?>;
|
||||
|
||||
function formatCurrency(value) {
|
||||
// Remove commas, currency symbols, spaces
|
||||
let cleaned = String(value).replace(/[₹,\s]/g, '');
|
||||
|
||||
// Ensure minus sign stays
|
||||
let num = parseFloat(cleaned) || 0;
|
||||
|
||||
// Format with Indian locale
|
||||
return (num < 0 ? '-' : '') + '₹' + Math.abs(num).toLocaleString('en-IN', {
|
||||
minimumFractionDigits: 2,
|
||||
maximumFractionDigits: 2
|
||||
});
|
||||
}
|
||||
const pdfData = <?php echo json_encode($pdfData); ?>;
|
||||
const grandTotal = <?php echo json_encode($grandTotal); ?>;
|
||||
|
||||
const logo = new Image();
|
||||
logo.src = '/asset/images/logo.webp';
|
||||
logo.onload = function() { addHeader(); };
|
||||
logo.onerror = function() { addHeader(); };
|
||||
logo.onload = () => addHeader();
|
||||
logo.onerror = () => addHeader();
|
||||
|
||||
function addHeader() {
|
||||
function addHeader(){
|
||||
try { doc.addImage(logo, 'PNG', 40, 30, 40, 40); } catch(e) {}
|
||||
|
||||
doc.setFontSize(16);
|
||||
doc.text(titleText, 100, 50);
|
||||
doc.setFontSize(10);
|
||||
doc.text(`Generated on: ${dateTime}`, 40, 80);
|
||||
doc.text(`User Type: ${userType}`, 40, 95);
|
||||
doc.text(`User ID: ${userName}`, 40, 110);
|
||||
addTable();
|
||||
}
|
||||
doc.text(`Agen Name: ${userName}`, 40, 110);
|
||||
|
||||
function addTable() {
|
||||
const headers = ["SL", "Type", "AC No", "Name", "Creation Date", "Maturity Value", "Balance", "Inst.", "Paid", "Amount"];
|
||||
let y = 130;
|
||||
|
||||
let totalBalance = 0, totalInstallment = 0;
|
||||
const rows = tableData.map(r => {
|
||||
totalBalance += parseFloat(r[6]) || 0;
|
||||
totalInstallment += parseFloat(r[9]) || 0;
|
||||
return [
|
||||
r[0], r[1], r[2], r[3], r[4],
|
||||
r[5], r[6],
|
||||
r[7], r[8],
|
||||
r[9]
|
||||
];
|
||||
const headers = ["SL","NAME ","MOBILE NO","ACCOUNT NO","EMI PAID","EMI DUE", "EMI AMOUNT", "TOTAL DUE AMOUNT","CUSTOMER. SIGN"];
|
||||
let currentType = '';
|
||||
let rows = [];
|
||||
|
||||
pdfData.forEach(row=>{
|
||||
if(row[0] !== currentType){
|
||||
if(rows.length>0){
|
||||
doc.autoTable({
|
||||
head:[headers],
|
||||
body:rows,
|
||||
startY:y,
|
||||
styles:{
|
||||
fontSize:7,
|
||||
cellPadding:6,
|
||||
lineWidth: 0.1, // border width
|
||||
lineColor: [0, 0, 0] // black border color
|
||||
},
|
||||
headStyles:{ fillColor: false, textColor: 0 },
|
||||
bodyStyles:{ valign:'middle', fillColor: false },
|
||||
alternateRowStyles: { fillColor: false },
|
||||
columnStyles: { 1: { cellWidth: 110 } }
|
||||
});
|
||||
y = doc.lastAutoTable.finalY + 10;
|
||||
rows=[];
|
||||
}
|
||||
currentType = row[0];
|
||||
doc.setFont(undefined,'bold');
|
||||
doc.text(`${currentType} Demand`,40,y);
|
||||
y+=15;
|
||||
doc.setFont(undefined,'normal');
|
||||
}
|
||||
rows.push(row.slice(1));
|
||||
});
|
||||
|
||||
doc.autoTable({
|
||||
head: [headers],
|
||||
body: rows,
|
||||
startY: 130,
|
||||
styles: {
|
||||
fontSize: 8,
|
||||
cellPadding: { top: 6, right: 5, bottom: 6, left: 5 }, // custom padding
|
||||
overflow: 'hidden'
|
||||
},
|
||||
headStyles: { fillColor: [233, 84, 32], textColor: 255 },
|
||||
bodyStyles: { valign: 'middle' } // vertically center align
|
||||
});
|
||||
if(rows.length>0){
|
||||
doc.autoTable({
|
||||
head:[headers],
|
||||
body:rows,
|
||||
startY:y,
|
||||
styles:{
|
||||
fontSize:7,
|
||||
cellPadding:6,
|
||||
lineWidth: 0.1, // border width
|
||||
lineColor: [0, 0, 0] // black border color
|
||||
},
|
||||
headStyles:{ fillColor: false, textColor: 0 },
|
||||
bodyStyles:{ valign:'middle', fillColor: false },
|
||||
alternateRowStyles: { fillColor: false },
|
||||
columnStyles: { 1: { cellWidth: 110 } }
|
||||
});
|
||||
y = doc.lastAutoTable.finalY + 20;
|
||||
}
|
||||
|
||||
// let finalY = doc.lastAutoTable.finalY + 20;
|
||||
// doc.setFont(undefined, 'bold');
|
||||
// doc.text(`Total Accounts: ${rows.length}`, 40, finalY);
|
||||
// doc.text(`Total Balance: ${totalBalance}`, 40, finalY + 15);
|
||||
// doc.text(`Total Installment Amount: ${totalInstallment}`, 40, finalY + 30);
|
||||
// Grand Total
|
||||
doc.setFont(undefined,'bold');
|
||||
doc.text(`Grand Total Accounts: ${grandTotal.accounts}`,40,y);
|
||||
doc.text(`Grand Total Paid Installments: ${grandTotal.paidInstallments}`,40,y+15);
|
||||
doc.text(`Grand Total Due Installments: ${grandTotal.dueInstallments}`,40,y+30);
|
||||
doc.text(`Grand Total Due Amount: ${grandTotal.dueAmount.toLocaleString('en-IN',{minimumFractionDigits:2, maximumFractionDigits:2})}`,40,y+45);
|
||||
|
||||
// Footer with page numbers
|
||||
const pageCount = doc.internal.getNumberOfPages();
|
||||
for (let i = 1; i <= pageCount; i++) {
|
||||
for(let i=1;i<=pageCount;i++){
|
||||
doc.setPage(i);
|
||||
doc.setFontSize(9);
|
||||
doc.setFont(undefined, 'normal');
|
||||
doc.text(`Generated by Loan Portal - Confidential`, 40, doc.internal.pageSize.height - 20);
|
||||
doc.text(`Page ${i} of ${pageCount}`, doc.internal.pageSize.width - 60, doc.internal.pageSize.height - 20);
|
||||
doc.setFont(undefined,'normal');
|
||||
doc.text(`Generated by Loan Portal - Confidential`,40,doc.internal.pageSize.height-20);
|
||||
doc.text(`Page ${i} of ${pageCount}`,doc.internal.pageSize.width-60,doc.internal.pageSize.height-20);
|
||||
}
|
||||
|
||||
doc.save(`Demand_Sheet_${userType}_${userName}_${now.toISOString().slice(0,10)}.pdf`);
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -1,102 +1,216 @@
|
||||
<div class="container">
|
||||
<table>
|
||||
<!-- <tr>
|
||||
<td>
|
||||
<form>
|
||||
<input type="date" name="tday">
|
||||
<input type="submit" class="btn-info" value="Daily Report">
|
||||
</form>
|
||||
</td>
|
||||
<td>
|
||||
<form>
|
||||
<input type="date" name="tmonth">
|
||||
<input type="submit" class="btn-info" value="Monthly Report">
|
||||
</form>
|
||||
</td>
|
||||
</tr> -->
|
||||
<tr><td>.</td><td>.</td></tr>
|
||||
<tr>
|
||||
<td colspan="2">
|
||||
<form>
|
||||
<label for="">From </label><input type="date" name="dFrom">
|
||||
<label for="">To </label><input type="date" name="dTo">
|
||||
<input type="submit" class="btn-info" value="Report">
|
||||
</form>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div class="container mt-4">
|
||||
<div class="card shadow-lg p-4 rounded-3">
|
||||
<h4 class="mb-3">Generate Report</h4>
|
||||
<form method="get" class="row g-3">
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">From</label>
|
||||
<input value="<?= $_GET['dFrom'] ?? '' ?>" type="date" name="dFrom" class="form-control" required>
|
||||
</div>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">To</label>
|
||||
<input value="<?= $_GET['dTo'] ?? '' ?>" type="date" name="dTo" class="form-control" required>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// ---- শুধুমাত্র Admin হলে Agent dropdown দেখানো হবে ----
|
||||
if($_SESSION['type'] === 'admin'){
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
|
||||
|
||||
$agents = $conn->query("SELECT * FROM `".$GLOBALS['arif_users']."` WHERE `type`='agent' ORDER BY user_name ASC");
|
||||
?>
|
||||
<div class="col-md-3">
|
||||
<label class="form-label">Agent</label>
|
||||
<select name="agent" id="agent" class="form-control">
|
||||
<option value="">-- All Agents --</option>
|
||||
<?php
|
||||
if($agents && $agents->num_rows > 0){
|
||||
while($a = $agents->fetch_assoc()){
|
||||
$selected = (isset($_GET['agent']) && $_GET['agent']==$a['user_id']) ? "selected" : "";
|
||||
echo "<option value='".$a['user_id']."' $selected>".$a['user_name']." (".$a['user_id'].")</option>";
|
||||
}
|
||||
}
|
||||
?>
|
||||
</select>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="col-md-3 d-flex align-items-end" style="margin-top: 25px;">
|
||||
<button type="submit" class="btn btn-info w-100" >Generate Report</button>
|
||||
<button id="downloadPdf" class="btn btn-danger mt-3"><i class="bi bi-file-earmark-pdf"></i> Download PDF</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<?php
|
||||
function report_view($type, $dt) {
|
||||
$dateFrom = $dt;
|
||||
|
||||
function report_view($type,$dt) {
|
||||
$dateFrom=$dt;
|
||||
if($type!="month" && $type!="day") {
|
||||
$dateFrom = strtotime($dt);
|
||||
$dateFrom = date("Y-m-d", $dateFrom);
|
||||
$dateTo = strtotime('+1 day', strtotime($type));
|
||||
$dateTo = date("Y-m-d", $dateTo);
|
||||
} else {
|
||||
if($type=="month") {
|
||||
$dateFrom = strtotime('-1 day', strtotime($dt));
|
||||
$dateFrom = date("Y-m-d", $dateFrom);
|
||||
}
|
||||
$dateTo = strtotime('+1 '.$type, strtotime($dt));
|
||||
$dateTo = date("Y-m-d", $dateTo);
|
||||
}
|
||||
|
||||
if($type!="month" || $type!="day") {
|
||||
$dateFrom= strtotime($dt); $dateFrom = date("Y-m-d", $dateFrom);
|
||||
$dateTo= strtotime('+1 day', strtotime($type)); $dateTo = date("Y-m-d", $dateTo);
|
||||
}
|
||||
//$dateFrom=$dt;
|
||||
else{
|
||||
if($type=="month") {$dateFrom= strtotime('-1 day', strtotime($dt)); $dateFrom = date("Y-m-d", $dateFrom);}
|
||||
$dateTo = strtotime('+1 '.$type, strtotime($dt));
|
||||
$dateTo = date("Y-m-d", $dateTo);
|
||||
}
|
||||
echo '<div class="container"> <h3>'.$dateFrom." -> ".$dateTo."(Up to)</h3> </div>";
|
||||
echo '<div class="container mt-4">
|
||||
<div class="alert alert-primary shadow-sm">
|
||||
<h5 class="mb-0">Report Period: '.$dateFrom." → ".$dateTo." (Up to)</h5>
|
||||
</div>
|
||||
</div>";
|
||||
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
|
||||
|
||||
$totalAmount=0;
|
||||
$totalAmount = 0;
|
||||
$rowsData = [];
|
||||
|
||||
echo '
|
||||
<div class="container" style="margin-top: 70px;">
|
||||
<h5>VIEW REPORT::::::::</h5><hr>
|
||||
</div>
|
||||
<div class="container">
|
||||
<table class="table table-striped table-bordered table-hover table-responsive">
|
||||
<tr>
|
||||
<th>Transaction ID</th>
|
||||
<th>Time</th>
|
||||
<th>AC No</th>
|
||||
<th>Name</th>
|
||||
<th>Amount</th>
|
||||
</tr>';
|
||||
echo '
|
||||
<div class="container mt-3">
|
||||
<div class="card shadow-sm rounded-3">
|
||||
<div class="card-body">
|
||||
<h5 class="mb-3">Transaction Report</h5>
|
||||
<div class="table-responsive">
|
||||
<table class="table table-bordered table-hover align-middle" id="reportTable">
|
||||
<thead class="table-light">
|
||||
<tr>
|
||||
<th>Transaction ID</th>
|
||||
<th>Agent</th>
|
||||
<th>Time</th>
|
||||
<th>AC No</th>
|
||||
<th>Name</th>
|
||||
<th>Amount</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>';
|
||||
|
||||
// ----- base query -----
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_tran']."` INNER JOIN `".$GLOBALS['arif_ac']."` ON `".$GLOBALS['arif_tran']."`.`AT_ACID`=`".$GLOBALS['arif_ac']."`.`AA_ACNO` WHERE `AT_TIMESTAMP` BETWEEN '".$dateFrom." 00:00:00' AND '".$dateTo." 00:00:00'";
|
||||
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_tran']."` INNER JOIN `".$GLOBALS['arif_ac']."` ON `".$GLOBALS['arif_tran']."`.`AT_ACID`=`".$GLOBALS['arif_ac']."`.`AA_ACNO` WHERE `AT_TIMESTAMP` BETWEEN '".$dateFrom." 00:00:00.000000' AND '".$dateTo." 00:00:00.000000' ORDER BY `arif_tran`.`AT_ID` DESC";
|
||||
$result = $conn->query($sql);
|
||||
if ($result->num_rows > 0) {
|
||||
while($row = $result->fetch_assoc()) {
|
||||
//$ID=$row["GC_ID"];
|
||||
// $tt=$row["AT_ID"]-10;
|
||||
echo "
|
||||
<tr>
|
||||
<td>".$row["AT_ID"]. "</td>
|
||||
<td>".$row["AT_TIMESTAMP"]. "</td>
|
||||
<td>".$row["AT_ACID"]. "</td>
|
||||
<td>".$row["AA_NAME"]. "</td>
|
||||
<td>".$row["AT_AMOUNT"]. "</td>
|
||||
</tr>";$totalAmount+=$row["AT_AMOUNT"];
|
||||
}
|
||||
} else {
|
||||
echo "0 results";
|
||||
}
|
||||
$conn->close();
|
||||
// ----- agent হলে নিজের report -----
|
||||
if($_SESSION['type'] === 'agent') {
|
||||
$sql .= " AND `AA_AGENT`='".$_SESSION['user_id']."'";
|
||||
}
|
||||
|
||||
echo '
|
||||
</table>
|
||||
<hr> <h2> Total Transaction amount : '.$totalAmount.'</h2>
|
||||
</div>
|
||||
';
|
||||
// ----- admin হলে filter option -----
|
||||
if($_SESSION['type'] === 'admin' && isset($_GET['agent']) && $_GET['agent']!="") {
|
||||
$agentId = $conn->real_escape_string($_GET['agent']);
|
||||
$sql .= " AND `AA_AGENT`='".$agentId."'";
|
||||
}
|
||||
|
||||
$sql .= " ORDER BY `".$GLOBALS['arif_tran']."`.`AT_ID` DESC";
|
||||
|
||||
$result = $conn->query($sql);
|
||||
if ($result && $result->num_rows > 0) {
|
||||
while($row = $result->fetch_assoc()) {
|
||||
echo "
|
||||
<tr>
|
||||
<td>".$row["AT_ID"]."</td>
|
||||
<td>".$row["AA_AGENT"]."</td>
|
||||
<td>".$row["AT_TIMESTAMP"]."</td>
|
||||
<td>".$row["AT_ACID"]."</td>
|
||||
<td>".$row["AA_NAME"]."</td>
|
||||
<td>".$row["AT_AMOUNT"]."</td>
|
||||
</tr>";
|
||||
$totalAmount += $row["AT_AMOUNT"];
|
||||
$rowsData[] = [$row["AT_ID"], $row["AT_TIMESTAMP"], $row["AT_ACID"], $row["AA_NAME"], $row["AT_AMOUNT"]];
|
||||
}
|
||||
} else {
|
||||
echo "<tr><td colspan='6' class='text-center text-muted'>No results found</td></tr>";
|
||||
}
|
||||
$conn->close();
|
||||
|
||||
echo '
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<hr>
|
||||
<h5 class="text-end">Total Transaction Amount : <b>'.$totalAmount.'</b></h5>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
';
|
||||
|
||||
// pass rows data to JS
|
||||
echo "<script>var reportData = ".json_encode($rowsData)."; var totalAmount = ".json_encode($totalAmount).";</script>";
|
||||
}
|
||||
|
||||
if(isset($_GET['tday']) && $_GET['tday']!="") report_view('day',$_GET['tday']);
|
||||
if(isset($_GET['tmonth']) && $_GET['tmonth']!="") report_view('month',$_GET['tmonth']);
|
||||
if(isset($_GET['dFrom']) && $_GET['dTo']!="") report_view($_GET['dTo'],$_GET['dFrom']);
|
||||
// ---- Call report function ----
|
||||
if(isset($_GET['tday']) && $_GET['tday']!="") report_view('day', $_GET['tday']);
|
||||
if(isset($_GET['tmonth']) && $_GET['tmonth']!="") report_view('month', $_GET['tmonth']);
|
||||
if(isset($_GET['dFrom']) && $_GET['dTo']!="") report_view($_GET['dTo'], $_GET['dFrom']);
|
||||
?>
|
||||
|
||||
//if(isset($_GET['Type']) && $_GET['Type']=="Loan") view_list_ac('Loan');
|
||||
// if(isset($_GET['Type']) && $_GET['Type']=="Recurring") view_list_ac('Recurring');
|
||||
// if(isset($_GET['Type']) && $_GET['Type']=="FD") view_list_ac('FD');
|
||||
?>
|
||||
<!-- PDF Download Scripts -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.5.28/jspdf.plugin.autotable.min.js"></script>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const downloadBtn = document.getElementById('downloadPdf');
|
||||
if(downloadBtn){
|
||||
downloadBtn.addEventListener('click', function() {
|
||||
const { jsPDF } = window.jspdf;
|
||||
const doc = new jsPDF('p', 'pt', 'a4');
|
||||
|
||||
const userType = "<?php echo $_SESSION['type']; ?>";
|
||||
const userName = "<?php echo $_SESSION['name']; ?>";
|
||||
const now = new Date();
|
||||
const dateTime = now.toLocaleDateString() + " " + now.toLocaleTimeString();
|
||||
const titleText = "Grafin Ventures Transaction Report";
|
||||
|
||||
const logo = new Image();
|
||||
logo.src = '/asset/images/logo.webp';
|
||||
logo.onload = () => addContent();
|
||||
logo.onerror = () => addContent();
|
||||
|
||||
function addContent(){
|
||||
try { doc.addImage(logo, 'PNG', 40, 30, 40, 40); } catch(e) {}
|
||||
doc.setFontSize(16);
|
||||
doc.text(titleText, 100, 50);
|
||||
doc.setFontSize(10);
|
||||
doc.text(`Generated on: ${dateTime}`, 40, 80);
|
||||
doc.text(`User Type: ${userType}`, 40, 95);
|
||||
doc.text(`User Name: ${userName}`, 40, 110);
|
||||
|
||||
let y = 130;
|
||||
|
||||
// table
|
||||
doc.autoTable({
|
||||
head: [["Txn ID","Time","Account No","Name","Amount"]],
|
||||
body: reportData,
|
||||
startY: y,
|
||||
styles: { fontSize:8, cellPadding:4, lineWidth: 0.1, lineColor:[0,0,0] },
|
||||
headStyles: { fillColor:false, textColor:0 },
|
||||
bodyStyles: { valign:'middle', fillColor:false },
|
||||
alternateRowStyles: { fillColor:false }
|
||||
});
|
||||
|
||||
y = doc.lastAutoTable.finalY + 20;
|
||||
doc.setFont(undefined,'bold');
|
||||
doc.text(`Total Transaction Amount: ${totalAmount}`,40,y);
|
||||
|
||||
// footer
|
||||
const pageCount = doc.internal.getNumberOfPages();
|
||||
for(let i=1;i<=pageCount;i++){
|
||||
doc.setPage(i);
|
||||
doc.setFontSize(9);
|
||||
doc.text(`Generated by Loan Portal - Confidential`,40,doc.internal.pageSize.height-20);
|
||||
doc.text(`Page ${i} of ${pageCount}`,doc.internal.pageSize.width-60,doc.internal.pageSize.height-20);
|
||||
}
|
||||
|
||||
doc.save(`Transaction_Report_${userType}_${userName}_${now.toISOString().slice(0,10)}.pdf`);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
</script>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?php
|
||||
// Database connection
|
||||
if($_SESSION['type'] !== 'admin'){
|
||||
echo '<script>window.location.href="/Admin/View_AC?Type=Recurring"</script>';
|
||||
}
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
$conn->set_charset("utf8");
|
||||
if ($conn->connect_error) {
|
||||
|
||||
@@ -36,6 +36,7 @@ function calculateAmount() {
|
||||
</div>
|
||||
|
||||
<?php
|
||||
$CURRENT_RECURRING_BALANCE = 0;
|
||||
if(isset($_GET["no"]) && isset($_GET["type"])&&$_GET["type"]=="Loan"){
|
||||
echo '
|
||||
<div class="container" style="margin-top: 20px;"> <h5>New Transaction : '.$GLOBALS['post_info'].' </h5><hr></div>
|
||||
@@ -60,7 +61,7 @@ function calculateAmount() {
|
||||
$date2 = date_create(date("Y/m/d"));
|
||||
$diff = date_diff($date1, $date2);
|
||||
if ($row["AA_ACTYPE"] == 'D'){$diff = $diff->format("%a"); $diff=(int)$diff;$due_i=$diff-$row["AA_NO_OF_PAYPAID"];} else {$diff=$diff->format("%m"); $diff=(int)$diff;$due_i=$diff-$row["AA_NO_OF_PAYPAID"];}
|
||||
//$ID=$row["GC_ID"];
|
||||
//$ID=$row["GC_ID"];
|
||||
echo "
|
||||
<tr>
|
||||
<td>".$row["AA_NAME"]."</td>
|
||||
@@ -150,6 +151,7 @@ function calculateAmount() {
|
||||
$diff = date_diff($date1, $date2);
|
||||
if ($row["AA_ACTYPE"] == 'D'){$diff = $diff->format("%a"); $diff=(int)$diff;$due_i=$diff-$row["AA_NO_OF_PAYPAID"];} else {$diff=$diff->format("%m"); $diff=(int)$diff;$due_i=$diff-$row["AA_NO_OF_PAYPAID"];}
|
||||
//$ID=$row["GC_ID"];
|
||||
$CURRENT_RECURRING_BALANCE = $row["AA_BAL"];
|
||||
echo "
|
||||
<tr>
|
||||
<td>".$row["AA_NAME"]. "</td>
|
||||
@@ -212,6 +214,141 @@ function calculateAmount() {
|
||||
echo '</table></div>';
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if ($_SESSION['type'] === 'admin' && isset($_GET["no"]) && isset($_GET["type"]) && $_GET["type"] == "Recurring") {
|
||||
if (
|
||||
$_SERVER['REQUEST_METHOD'] === 'POST'
|
||||
&& isset($_POST['PAY_LOAN_EMI_FROM_RECURRING'], $_POST['PAY_LOAN_EMI_FROM_RECURRING_ID'], $_POST['DEDUCT_LOAN_AMOUNT'])
|
||||
&& $_POST['PAY_LOAN_EMI_FROM_RECURRING_ID'] === 'axakassaoxnnxsaoij34866'
|
||||
) {
|
||||
$loanEMIAmount = floatval($_POST['DEDUCT_LOAN_AMOUNT']);
|
||||
$deductAmount = -$loanEMIAmount; // negative for recurring deduction
|
||||
$paidToLoanAccountNumber = $_POST['LOAN_AC_NUMBER'];
|
||||
$accountId = $_GET['no'];
|
||||
|
||||
if (!$accountId) {
|
||||
echo "Account number missing";
|
||||
exit;
|
||||
}
|
||||
|
||||
// ✅ DB connection
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) {
|
||||
die("Connection failed: " . $conn->connect_error);
|
||||
}
|
||||
|
||||
// ✅ Check recurring balance first
|
||||
$sql = "SELECT AA_BAL FROM `" . $GLOBALS['arif_ac'] . "` WHERE `AA_ACNO` = ?";
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->bind_param("s", $accountId);
|
||||
$stmt->execute();
|
||||
$stmt->bind_result($CURRENT_RECURRING_BALANCE);
|
||||
$stmt->fetch();
|
||||
$stmt->close();
|
||||
|
||||
if ($loanEMIAmount > $CURRENT_RECURRING_BALANCE) {
|
||||
echo "<div class='container' style=' background-color: #f8d7da; color: #721c24; padding: 12px 20px; border: 1px solid #f5c6cb; border-radius: 5px; font-family: Arial, sans-serif; font-size: 15px; margin: 10px auto; position: relative;'>
|
||||
<strong>Error!</strong> Insufficient balance in Recurring account.
|
||||
<span style=\" position: absolute; top: 8px; right: 12px; color: #721c24; font-weight: bold; cursor: pointer; \" onclick=\"this.parentElement.style.display='none';\">×</span>
|
||||
</div>";
|
||||
|
||||
exit;
|
||||
}
|
||||
|
||||
// ✅ Begin transaction for atomicity
|
||||
$conn->begin_transaction();
|
||||
|
||||
try {
|
||||
$table = $GLOBALS['arif_tran'] ?? 'arif_tran';
|
||||
$userType = 'admin';
|
||||
|
||||
// Entry 1: Deduction from recurring
|
||||
$remarksText1 = "Deducted ₹$loanEMIAmount from recurring balance to pay Loan Account No: $paidToLoanAccountNumber EMI";
|
||||
$stmt = $conn->prepare("INSERT INTO `$table` (AT_ADMIN, AT_ACID, AT_AMOUNT, REMARKS) VALUES (?, ?, ?, ?)");
|
||||
$stmt->bind_param("ssds", $userType, $accountId, $deductAmount, $remarksText1);
|
||||
$stmt->execute();
|
||||
$stmt->close();
|
||||
|
||||
// Entry 2: Credit to loan account
|
||||
$remarksText2 = "Credited ₹$loanEMIAmount to Loan Account No: $paidToLoanAccountNumber EMI from recurring balance";
|
||||
$stmt = $conn->prepare("INSERT INTO `$table` (AT_ADMIN, AT_ACID, AT_AMOUNT, REMARKS) VALUES (?, ?, ?, ?)");
|
||||
$stmt->bind_param("ssds", $userType, $paidToLoanAccountNumber, $loanEMIAmount, $remarksText2);
|
||||
$stmt->execute();
|
||||
$stmt->close();
|
||||
|
||||
// Update Loan Account
|
||||
$ins_no = 1;
|
||||
$sql = "UPDATE `" . $GLOBALS['arif_ac'] . "` SET `AA_BAL` = `AA_BAL` + ?, `AA_NO_OF_PAYPAID` = `AA_NO_OF_PAYPAID` + ? WHERE `AA_ACNO` = ?";
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->bind_param("dis", $loanEMIAmount, $ins_no, $paidToLoanAccountNumber);
|
||||
$stmt->execute();
|
||||
$stmt->close();
|
||||
|
||||
// Update Recurring Account
|
||||
$sql = "UPDATE `" . $GLOBALS['arif_ac'] . "`
|
||||
SET `AA_BAL` = `AA_BAL` - ?
|
||||
WHERE `AA_ACNO` = ?";
|
||||
$stmt = $conn->prepare($sql);
|
||||
$stmt->bind_param("ds", $loanEMIAmount, $accountId);
|
||||
$stmt->execute();
|
||||
$stmt->close();
|
||||
|
||||
// ✅ Commit if everything ok
|
||||
$conn->commit();
|
||||
|
||||
echo "<div class='container' style=' background-color: #d4edda; color: #155724; padding: 12px 20px; border: 1px solid #c3e6cb; border-radius: 5px; font-family: Arial, sans-serif; font-size: 15px; margin: 10px auto; position: relative;'>
|
||||
<strong>Success!</strong> Loan EMI paid successfully!
|
||||
<span style=\" position: absolute; top: 8px; right: 12px; color: #155724; font-weight: bold; cursor: pointer; \" onclick=\"this.parentElement.style.display='none';\">×</span>
|
||||
</div>";
|
||||
|
||||
|
||||
} catch (Exception $e) {
|
||||
$conn->rollback();
|
||||
echo "Error processing EMI payment: " . $e->getMessage();
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if ($_SESSION['type'] === 'admin' && isset($_GET["no"]) && isset($_GET["type"]) && $_GET["type"] == "Recurring") { ?>
|
||||
<div class="container">
|
||||
<h4>Pay Loan EMI from Recurring balance</h4>
|
||||
<div style="display: flex; gap: 20px; flex-direction: row; max-width: 60%;">
|
||||
<input class="form-control" type="text" id="acno" placeholder="Enter Account No" />
|
||||
<button class="btn btn-primary" onclick="getAccountDetails()">Get Details</button>
|
||||
</div>
|
||||
|
||||
|
||||
<form id="PAY_LOAN_RECURRING_FORM" method="post" style="display: none; gap: 20px; flex-direction: column; max-width: 60%; margin-top: 30px;">
|
||||
<input type="hidden" name="PAY_LOAN_EMI_FROM_RECURRING" value="1">
|
||||
<input type="hidden" name="PAY_LOAN_EMI_FROM_RECURRING_ID" value="axakassaoxnnxsaoij34866">
|
||||
|
||||
<div>
|
||||
<label for="ACCOUNT_HOLDER_NAME">Account holder Name:</label>
|
||||
<input class="form-control" id="ACCOUNT_HOLDER_NAME" name="ACCOUNT_HOLDER_NAME" type="text" readOnly />
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="ACCOUNT_HOLDER_NAME">Recurring Balance:</label>
|
||||
<input class="form-control" id="ACCOUNT_HOLDER_NAME" name="ACCOUNT_HOLDER_NAME" type="text" value="<?= $CURRENT_RECURRING_BALANCE ?>" readOnly />
|
||||
</div>
|
||||
<div>
|
||||
<label for="LOAN_AC_NUMBER">Loan Account Number:</label>
|
||||
<input class="form-control" id="LOAN_AC_NUMBER" name="LOAN_AC_NUMBER" type="text" required readOnly />
|
||||
</div>
|
||||
<div>
|
||||
<label for="DEDUCT_LOAN_AMOUNT">Deduct Loan Amount:</label>
|
||||
<input class="form-control" id="DEDUCT_LOAN_AMOUNT" name="DEDUCT_LOAN_AMOUNT" type="number" required />
|
||||
</div>
|
||||
<div style="">
|
||||
<input class="btn btn-success" type="submit" value="Deduct & Pay Now" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<div class="container" style="margin-top: 70px;">
|
||||
<div class="row">
|
||||
@@ -265,6 +402,39 @@ if(isset($_GET["no"])){
|
||||
?>
|
||||
|
||||
<script>
|
||||
|
||||
function getAccountDetails() {
|
||||
let acno = document.getElementById("acno").value;
|
||||
|
||||
fetch("/exe/get-loan-details/", {
|
||||
method: "POST",
|
||||
headers: {
|
||||
"Content-Type": "application/x-www-form-urlencoded"
|
||||
},
|
||||
body: "AA_ACNO=" + encodeURIComponent(acno)
|
||||
})
|
||||
.then(res => res.json())
|
||||
.then(data => {
|
||||
document.getElementById('PAY_LOAN_RECURRING_FORM').style.display = 'flex';
|
||||
console.log(data.data[0].AA_ACNO);
|
||||
document.getElementById('LOAN_AC_NUMBER').value = data.data[0].AA_ACNO;
|
||||
document.getElementById('DEDUCT_LOAN_AMOUNT').value = data.data[0].AA_INSTALLMENT;
|
||||
document.getElementById('ACCOUNT_HOLDER_NAME').value = data.data[0].AA_NAME;
|
||||
document.getElementById('INSTALLMENT_NUMBER').value = data.data[0].AA_BAL / data.data[0].AA_INSTALLMENT;
|
||||
|
||||
if(data.status === "Success"){
|
||||
// Example: show first record
|
||||
console.log("Account Holder: " + data.data[0].AA_NAME + "\nBalance: " + data.data[0].AA_BAL);
|
||||
} else {
|
||||
alert(data.statusmsg);
|
||||
}
|
||||
})
|
||||
.catch(err => console.error("Error:", err));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
var submitInstallment = document.getElementById("submitInstallment");
|
||||
function sendData(event) {
|
||||
event.preventDefault();
|
||||
@@ -287,4 +457,13 @@ function sendData(event) {
|
||||
XHR.open("POST", "/exe/receive_amount/");
|
||||
XHR.send(FD);
|
||||
}
|
||||
|
||||
function addACNumberToField(){
|
||||
document.getElementById('LOAN_ACC_NUMBER').value = document.getElementById('LOAN_AC_NUMBER').value;
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<!-- GVD20210607R519 -->
|
||||
@@ -1,9 +1,20 @@
|
||||
<div class="container" style="background-color:#e0a3a3;padding:8px;">
|
||||
<ul class="nav nav-pills nav-justified">
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="FD") echo'class="active"';?>><a href="View_AC?Type=FD">Fixed Deposits</a></li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Loan") echo'class="active"';?>><a href="View_AC?Type=Loan">Loan A/C</a></li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Recurring") echo'class="active"';?>><a href="View_AC?Type=Recurring">Recurring A/Cs</a></li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Closed-Acc") echo'class="active"';?>><a href="View_AC?Type=Closed-Acc">Closed A/C</a></li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="FD") echo'class="active"';?>>
|
||||
<a href="View_AC?Type=FD">Fixed Deposits</a>
|
||||
</li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Loan") echo'class="active"';?>>
|
||||
<a href="View_AC?Type=Loan">Loan A/C</a>
|
||||
</li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Closed-Acc") echo'class="active"';?>>
|
||||
<a href="View_AC?Type=Closed-Acc">Closed Loan</a>
|
||||
</li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Recurring") echo'class="active"';?>>
|
||||
<a href="View_AC?Type=Recurring">Recurring A/Cs</a>
|
||||
</li>
|
||||
<li <?php if(isset($_GET['Type']) && $_GET['Type']=="Matured-Recurring") echo'class="active"';?>>
|
||||
<a href="View_AC?Type=Matured-Recurring">Matured Recurring</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
@@ -17,8 +28,8 @@ function view_list_ac($type) {
|
||||
<table class="table table-striped table-bordered table-hover table-responsive" style="overflow-x: scroll;">
|
||||
<tr>
|
||||
<th>SL</th>
|
||||
<th>Type</th>
|
||||
';
|
||||
<th>Type</th>';
|
||||
|
||||
if ($_SESSION['type'] === 'admin') {
|
||||
echo '<th>Agent</th>';
|
||||
}
|
||||
@@ -47,17 +58,36 @@ function view_list_ac($type) {
|
||||
// Build SQL query based on user type and account type
|
||||
if($_SESSION['type'] === 'agent') {
|
||||
if($type === 'Closed-Acc') {
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `STATUS`='Closed' AND `AA_AGENT`='".$_SESSION['user_id']."' ORDER BY `AA_ID` DESC";
|
||||
// Only Closed Loan
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Loan' AND `STATUS`='closed' AND `AA_AGENT`='".$_SESSION['user_id']."' ORDER BY `AA_ID` DESC";
|
||||
} elseif($type === 'Matured-Recurring') {
|
||||
// Only Matured Recurring
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Recurring' AND `STATUS`='matured' AND `AA_AGENT`='".$_SESSION['user_id']."' ORDER BY `AA_ID` DESC";
|
||||
} elseif($type === 'Loan') {
|
||||
// Loan except Closed (include NULL)
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Loan' AND (`STATUS` IS NULL OR `STATUS`!='closed') AND `AA_AGENT`='".$_SESSION['user_id']."' ORDER BY `AA_ID` DESC";
|
||||
} elseif($type === 'Recurring') {
|
||||
// Recurring except Matured (include NULL)
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Recurring' AND (`STATUS` IS NULL OR `STATUS`!='matured') AND `AA_AGENT`='".$_SESSION['user_id']."' ORDER BY `AA_ID` DESC";
|
||||
} else {
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='".$type."' AND `AA_AGENT`='".$_SESSION['user_id']."' ORDER BY `AA_ID` DESC";
|
||||
}
|
||||
} elseif($_SESSION['type'] === 'admin') {
|
||||
if($type === 'Closed-Acc') {
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `STATUS`='Closed' ORDER BY `AA_ID` DESC";
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Loan' AND `STATUS`='closed' ORDER BY `AA_ID` DESC";
|
||||
} elseif($type === 'Matured-Recurring') {
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Recurring' AND `STATUS`='matured' ORDER BY `AA_ID` DESC";
|
||||
} elseif($type === 'Loan') {
|
||||
// Loan except Closed (include NULL)
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Loan' AND (`STATUS` IS NULL OR `STATUS`!='closed') ORDER BY `AA_ID` DESC";
|
||||
} elseif($type === 'Recurring') {
|
||||
// Recurring except Matured (include NULL)
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='Recurring' AND (`STATUS` IS NULL OR `STATUS`!='matured') ORDER BY `AA_ID` DESC";
|
||||
} else {
|
||||
$sql = "SELECT * FROM `".$GLOBALS['arif_ac']."` WHERE `AA_TYPE`='".$type."' ORDER BY `AA_ID` DESC";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$result = $conn->query($sql);
|
||||
|
||||
@@ -88,12 +118,12 @@ function view_list_ac($type) {
|
||||
<td>".$tt."</td>
|
||||
<td>".$row["AA_ACTYPE"].",".$row["AA_TYPE"]."</td>";
|
||||
|
||||
// Only show Agent column for admin users
|
||||
if ($_SESSION['type'] === 'admin') {
|
||||
echo "<td>".$row["AA_AGENT"]."</td>";
|
||||
}
|
||||
|
||||
echo "<td><a href='./Details?no=".$row["AA_ACNO"]."&type=".$row["AA_TYPE"]."'>".$row["AA_ACNO"]."</a> <a href='./Trans_New?no=".$row["AA_ACNO"]."&type=".$row["AA_TYPE"]."'>Transact</a></td>
|
||||
echo "<td><a href='./Details?no=".$row["AA_ACNO"]."&type=".$row["AA_TYPE"]."'>".$row["AA_ACNO"]."</a>
|
||||
<a href='./Trans_New?no=".$row["AA_ACNO"]."&type=".$row["AA_TYPE"]."'>Transact</a></td>
|
||||
<td>".$row["AA_NAME"]."</td>
|
||||
<td>".$row["AA_DATE"]."</td>
|
||||
<td>".$row["AA_MATURE_VALUE"]."</td>
|
||||
@@ -144,6 +174,9 @@ if(isset($_GET['Type'])) {
|
||||
case "Recurring":
|
||||
view_list_ac('Recurring');
|
||||
break;
|
||||
case "Matured-Recurring":
|
||||
view_list_ac('Matured-Recurring');
|
||||
break;
|
||||
case "FD":
|
||||
view_list_ac('FD');
|
||||
break;
|
||||
@@ -152,4 +185,4 @@ if(isset($_GET['Type'])) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
?>
|
||||
?>
|
||||
|
||||
34
CONTENT/ROOT_URI/exe/get-loan-details/index.php
Normal file
34
CONTENT/ROOT_URI/exe/get-loan-details/index.php
Normal file
@@ -0,0 +1,34 @@
|
||||
<?php
|
||||
$response = new stdClass();
|
||||
$total = array();
|
||||
|
||||
if (isset($_POST["AA_ACNO"]) && !empty($_POST["AA_ACNO"])) {
|
||||
$AA_ACNO = $_POST["AA_ACNO"];
|
||||
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
|
||||
|
||||
$sql = "SELECT * FROM `" . $GLOBALS['arif_ac'] . "` WHERE `AA_ACNO` = '" . $conn->real_escape_string($AA_ACNO) . "'";
|
||||
$result = $conn->query($sql);
|
||||
|
||||
if ($result && $result->num_rows > 0) {
|
||||
$rows = array();
|
||||
while ($row = $result->fetch_assoc()) {
|
||||
$rows[] = $row;
|
||||
}
|
||||
$total['status'] = 'Success';
|
||||
$total['data'] = $rows;
|
||||
} else {
|
||||
$total['status'] = 'Error';
|
||||
$total['statusmsg'] = 'No record found for ACNO: ' . $AA_ACNO;
|
||||
}
|
||||
|
||||
$conn->close();
|
||||
} else {
|
||||
$total['status'] = 'Error';
|
||||
$total['statusmsg'] = 'AA_ACNO missing in request!';
|
||||
}
|
||||
|
||||
$response = $total;
|
||||
echo json_encode($response);
|
||||
?>
|
||||
@@ -3,9 +3,13 @@ $response = new stdClass();
|
||||
$total = array();
|
||||
if (isset($_POST["add_i"]) && isset($_POST["AA_ACNO"]) && is_numeric($_POST["add_i"]) && $_POST["add_i"] > 0) {
|
||||
if(isset($_POST["ins_no"])) $ins_no = $_POST["ins_no"]; else $ins_no = 1;
|
||||
|
||||
if(isset($_POST["fine_amount"])) $fine_amt = $_POST["fine_amount"]; else $fine_amt = 0;
|
||||
|
||||
$conn = new mysqli($GLOBALS['host'], $GLOBALS['user'], $GLOBALS['pass'], $GLOBALS['db']);
|
||||
|
||||
if ($conn->connect_error) die("Connection failed: " . $conn->connect_error);
|
||||
|
||||
if ($conn->query("UPDATE `" . $GLOBALS['arif_ac'] . "` SET `AA_FINE` = `AA_FINE` + 5, `AA_BAL` = `AA_BAL`+".$_POST["add_i"]." , `AA_NO_OF_PAYPAID` = `AA_NO_OF_PAYPAID`+".$ins_no." WHERE `AA_ACNO` = '" . $_POST["AA_ACNO"] . "'"));
|
||||
//Add entry to Transaction
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user