feat: add financial year and YTD defaults to dashboard date filter

This commit is contained in:
theRAD
2026-03-06 04:45:00 +02:00
parent ef3efc539a
commit 5c5829e438

View File

@@ -120,6 +120,22 @@
<!-- Date Range Filter Bar --> <!-- Date Range Filter Bar -->
<div class="max-w-[1600px] mx-auto px-6 py-2 flex items-center gap-3 border-t border-white/5"> <div class="max-w-[1600px] mx-auto px-6 py-2 flex items-center gap-3 border-t border-white/5">
<svg class="w-4 h-4 text-slate-400 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/></svg> <svg class="w-4 h-4 text-slate-400 shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z"/></svg>
<label class="text-xs text-slate-400">Financial Year</label>
<select id="filter-fy" onchange="applyFinancialYear()" class="bg-white/5 border border-white/10 rounded-lg px-3 py-1.5 text-xs text-white focus:border-red-500 focus:outline-none focus:ring-1 focus:ring-red-500/30">
<option value="" class="bg-slate-900 text-white">Custom / YTD</option>
<script>
const currentYear = new Date().getFullYear();
// If before March, current FY started last year
const currentFYStart = new Date().getMonth() < 2 ? currentYear - 1 : currentYear;
for (let y = currentFYStart; y >= 2020; y--) {
document.write(`<option value="${y}" class="bg-slate-900 text-white">FY ${y}/${(y+1).toString().substring(2)}</option>`);
}
</script>
</select>
<div class="h-4 border-l border-white/10 mx-1"></div>
<label class="text-xs text-slate-400">From</label> <label class="text-xs text-slate-400">From</label>
<input type="date" id="filter-from" class="bg-white/5 border border-white/10 rounded-lg px-3 py-1.5 text-xs text-white focus:border-red-500 focus:outline-none focus:ring-1 focus:ring-red-500/30" /> <input type="date" id="filter-from" class="bg-white/5 border border-white/10 rounded-lg px-3 py-1.5 text-xs text-white focus:border-red-500 focus:outline-none focus:ring-1 focus:ring-red-500/30" />
<label class="text-xs text-slate-400">To</label> <label class="text-xs text-slate-400">To</label>
@@ -377,8 +393,22 @@
// ── Date filter helpers ── // ── Date filter helpers ──
function getDateParams() { function getDateParams() {
const from = document.getElementById('filter-from').value; let from = document.getElementById('filter-from').value;
const to = document.getElementById('filter-to').value; let to = document.getElementById('filter-to').value;
// Default to YTD if both are empty
if (!from && !to) {
const now = new Date();
from = `${now.getFullYear()}-01-01`;
to = now.toISOString().split('T')[0];
// Update the visual inputs
document.getElementById('filter-from').value = from;
document.getElementById('filter-to').value = to;
setTimeout(updateFilterStatus, 50);
}
const params = new URLSearchParams(); const params = new URLSearchParams();
if (from) params.set('from', from); if (from) params.set('from', from);
if (to) params.set('to', to); if (to) params.set('to', to);
@@ -386,9 +416,32 @@ function getDateParams() {
} }
function clearDateFilter() { function clearDateFilter() {
document.getElementById('filter-fy').value = '';
document.getElementById('filter-from').value = ''; document.getElementById('filter-from').value = '';
document.getElementById('filter-to').value = ''; document.getElementById('filter-to').value = '';
document.getElementById('filter-status').textContent = ''; // When cleared, getDateParams will automatically set it back to YTD
// and updateFilterStatus will be called via timeout
loadAllData();
}
function applyFinancialYear() {
const fyYear = document.getElementById('filter-fy').value;
if (!fyYear) return;
const startYear = parseInt(fyYear);
const endYear = startYear + 1;
// Financial year starts March 1st
const from = `${startYear}-03-01`;
// Calculate last day of Feb taking leap years into account
const isLeapYear = (endYear % 4 === 0 && endYear % 100 !== 0) || (endYear % 400 === 0);
const to = `${endYear}-02-${isLeapYear ? '29' : '28'}`;
document.getElementById('filter-from').value = from;
document.getElementById('filter-to').value = to;
updateFilterStatus();
loadAllData(); loadAllData();
} }