Spaces:
Sleeping
Sleeping
File size: 3,506 Bytes
58c1398 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | /**
* Reports Page Logic - Aadhaar Pro
*/
document.addEventListener('DOMContentLoaded', () => {
if (typeof flatpickr !== 'undefined') {
flatpickr(".date-picker", {
dateFormat: "Y-m-d",
allowInput: true
});
}
loadReports();
});
async function loadReports(filters = {}) {
const listEl = document.getElementById('reports-list');
if (!listEl) return;
try {
let url = '/api/wallet/ledger';
if (filters.from || filters.to) {
const params = new URLSearchParams(filters);
url += `?${params.toString()}`;
}
const res = await fetch(url);
const data = await res.json();
if (data && data.length > 0) {
const items = data.map(item => {
let displayId = item.id ? item.id.substring(0, 8) + '...' : 'N/A';
if (item.description && item.description.includes('Aadhaar Advance: ')) {
const parts = item.description.split('Aadhaar Advance: ');
if (parts.length > 1) displayId = parts[1];
}
const statusClass = item.type === 'credit' ? 'status-approved' : 'status-rejected';
const statusIcon = item.type === 'credit' ? 'fa-arrow-down' : 'fa-arrow-up';
const statusText = item.type === 'credit' ? 'CREDIT' : 'DEBIT';
const amountPrefix = item.type === 'credit' ? '+' : '-';
const amountClass = item.type === 'credit' ? 'amount-plus' : 'amount-minus';
return `
<div class="request-item">
<div class="request-info">
<div class="request-amount ${amountClass}">${amountPrefix} ₹${item.amount.toFixed(2)}</div>
<div class="request-details">
<span><i class="fa-solid fa-file-invoice"></i> ${item.description}</span>
<span><i class="fa-solid fa-calendar"></i> ${item.date}</span>
</div>
<div class="request-details" style="margin-top:4px">
<span><i class="fa-solid fa-wallet"></i> Balance: ₹${item.balance_after.toFixed(2)}</span>
<span><i class="fa-solid fa-id-badge"></i> ${displayId}</span>
</div>
</div>
<div class="request-status ${statusClass}">
<i class="fa-solid ${statusIcon}"></i> ${statusText}
</div>
</div>`;
}).join('');
listEl.innerHTML = items;
} else {
listEl.innerHTML = `
<div class="empty-state">
<i class="fa-solid fa-folder-open"></i>
<h3>No reports found</h3>
<p>No transactions for the selected period</p>
</div>`;
}
} catch (err) {
console.error('Error loading reports:', err);
listEl.innerHTML = `
<div class="error-state">
<i class="fa-solid fa-triangle-exclamation"></i>
<h3>Failed to load</h3>
<p>Could not fetch report data</p>
</div>`;
}
}
function applyFilter() {
const from = document.getElementById('from-date').value;
const to = document.getElementById('to-date').value;
loadReports({ from, to });
}
window.applyFilter = applyFilter;
|