This commit is contained in:
@@ -27,7 +27,8 @@ const currentTeamIdResolved = userMembership.organizationId;
|
||||
|
||||
// Get filter parameters
|
||||
const currentYear = new Date().getFullYear();
|
||||
const selectedYear = Astro.url.searchParams.get('year') ? parseInt(Astro.url.searchParams.get('year')!) : currentYear;
|
||||
const yearParam = Astro.url.searchParams.get('year');
|
||||
const selectedYear = yearParam === 'current' || !yearParam ? 'current' : parseInt(yearParam);
|
||||
const selectedType = Astro.url.searchParams.get('type') || 'all';
|
||||
const selectedStatus = Astro.url.searchParams.get('status') || 'all';
|
||||
const sortBy = Astro.url.searchParams.get('sort') || 'date-desc';
|
||||
@@ -45,9 +46,14 @@ const allInvoicesRaw = await db.select({
|
||||
// Get unique years from invoices
|
||||
const availableYears = [...new Set(allInvoicesRaw.map(i => i.invoice.issueDate.getFullYear()))].sort((a, b) => b - a);
|
||||
|
||||
// Ensure current year is in the list
|
||||
if (!availableYears.includes(currentYear)) {
|
||||
availableYears.unshift(currentYear);
|
||||
}
|
||||
|
||||
// Filter by year
|
||||
const yearStart = new Date(selectedYear, 0, 1);
|
||||
const yearEnd = new Date(selectedYear, 11, 31, 23, 59, 59);
|
||||
const yearStart = selectedYear === 'current' ? new Date(currentYear, 0, 1) : new Date(selectedYear, 0, 1);
|
||||
const yearEnd = selectedYear === 'current' ? new Date() : new Date(selectedYear, 11, 31, 23, 59, 59);
|
||||
|
||||
let filteredInvoices = allInvoicesRaw.filter(i => {
|
||||
const issueDate = i.invoice.issueDate;
|
||||
@@ -130,7 +136,7 @@ const getStatusColor = (status: string) => {
|
||||
</div>
|
||||
<div class="stat-title">Total Invoices</div>
|
||||
<div class="stat-value text-primary">{yearInvoices.filter(i => i.invoice.type === 'invoice').length}</div>
|
||||
<div class="stat-desc">{selectedYear}</div>
|
||||
<div class="stat-desc">{selectedYear === 'current' ? `${currentYear} (YTD)` : selectedYear}</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -156,7 +162,7 @@ const getStatusColor = (status: string) => {
|
||||
.filter(i => i.invoice.type === 'invoice' && i.invoice.status === 'paid')
|
||||
.reduce((acc, curr) => acc + curr.invoice.total, 0), 'USD')}
|
||||
</div>
|
||||
<div class="stat-desc">Paid invoices ({selectedYear})</div>
|
||||
<div class="stat-desc">Paid invoices ({selectedYear === 'current' ? `${currentYear} YTD` : selectedYear})</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -170,13 +176,10 @@ const getStatusColor = (status: string) => {
|
||||
<span class="label-text font-medium">Year</span>
|
||||
</label>
|
||||
<select name="year" class="select select-bordered w-full" onchange="this.form.submit()">
|
||||
{availableYears.length > 0 ? (
|
||||
availableYears.map(year => (
|
||||
<option value={year} selected={year === selectedYear}>{year}</option>
|
||||
))
|
||||
) : (
|
||||
<option value={currentYear}>{currentYear}</option>
|
||||
)}
|
||||
<option value="current" selected={selectedYear === 'current'}>Current Year to Date ({currentYear})</option>
|
||||
{availableYears.map(year => (
|
||||
<option value={year} selected={year === selectedYear}>{year}</option>
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -221,7 +224,7 @@ const getStatusColor = (status: string) => {
|
||||
</div>
|
||||
</form>
|
||||
|
||||
{(selectedYear !== currentYear || selectedType !== 'all' || selectedStatus !== 'all' || sortBy !== 'date-desc') && (
|
||||
{(selectedYear !== 'current' || selectedType !== 'all' || selectedStatus !== 'all' || sortBy !== 'date-desc') && (
|
||||
<div class="mt-4">
|
||||
<a href="/dashboard/invoices" class="btn btn-ghost btn-sm">
|
||||
<Icon name="heroicons:x-mark" class="w-4 h-4" />
|
||||
@@ -238,7 +241,7 @@ const getStatusColor = (status: string) => {
|
||||
<p class="text-sm text-base-content/70">
|
||||
Showing <span class="font-semibold text-base-content">{allInvoices.length}</span>
|
||||
{allInvoices.length === 1 ? 'result' : 'results'}
|
||||
{selectedYear && ` for ${selectedYear}`}
|
||||
{selectedYear === 'current' ? ` for ${currentYear} (year to date)` : ` for ${selectedYear}`}
|
||||
</p>
|
||||
</div>
|
||||
<div class="overflow-x-auto md:overflow-visible pb-32 md:pb-0">
|
||||
|
||||
Reference in New Issue
Block a user