feat: add "This year" period option to reports and dashboard

Adds a "year" period (Jan 1 to today) between "6 months" and "12 months"
in the period selector across all reports and dashboard views.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
le king fu 2026-02-22 09:17:33 -05:00
parent d06153f472
commit b46cad5888
7 changed files with 11 additions and 2 deletions

View file

@ -5,6 +5,7 @@
### Added ### Added
- Dynamic Report: fields can now be used in multiple zones simultaneously (rows + filters, columns + filters) - Dynamic Report: fields can now be used in multiple zones simultaneously (rows + filters, columns + filters)
- Dynamic Report: right-click on a filter value to exclude it (shown with strikethrough in red) - Dynamic Report: right-click on a filter value to exclude it (shown with strikethrough in red)
- "This year" period option in reports and dashboard (Jan 1 to today)
## [0.3.9] ## [0.3.9]

View file

@ -3,7 +3,7 @@ import { useTranslation } from "react-i18next";
import { Calendar } from "lucide-react"; import { Calendar } from "lucide-react";
import type { DashboardPeriod } from "../../shared/types"; import type { DashboardPeriod } from "../../shared/types";
const PERIODS: DashboardPeriod[] = ["month", "3months", "6months", "12months", "all"]; const PERIODS: DashboardPeriod[] = ["month", "3months", "6months", "year", "12months", "all"];
interface PeriodSelectorProps { interface PeriodSelectorProps {
value: DashboardPeriod; value: DashboardPeriod;

View file

@ -102,6 +102,9 @@ function computeDateRange(
case "6months": case "6months":
from = new Date(year, month - 5, 1); from = new Date(year, month - 5, 1);
break; break;
case "year":
from = new Date(year, 0, 1);
break;
case "12months": case "12months":
from = new Date(year, month - 11, 1); from = new Date(year, month - 11, 1);
break; break;

View file

@ -124,6 +124,9 @@ function computeDateRange(
case "6months": case "6months":
from = new Date(year, month - 5, 1); from = new Date(year, month - 5, 1);
break; break;
case "year":
from = new Date(year, 0, 1);
break;
case "12months": case "12months":
from = new Date(year, month - 11, 1); from = new Date(year, month - 11, 1);
break; break;

View file

@ -30,6 +30,7 @@ function computeDateRange(
case "month": from = new Date(year, month, 1); break; case "month": from = new Date(year, month, 1); break;
case "3months": from = new Date(year, month - 2, 1); break; case "3months": from = new Date(year, month - 2, 1); break;
case "6months": from = new Date(year, month - 5, 1); break; case "6months": from = new Date(year, month - 5, 1); break;
case "year": from = new Date(year, 0, 1); break;
case "12months": from = new Date(year, month - 11, 1); break; case "12months": from = new Date(year, month - 11, 1); break;
default: from = new Date(year, month, 1); break; default: from = new Date(year, month, 1); break;
} }

View file

@ -33,6 +33,7 @@ function computeDateRange(
case "month": from = new Date(year, month, 1); break; case "month": from = new Date(year, month, 1); break;
case "3months": from = new Date(year, month - 2, 1); break; case "3months": from = new Date(year, month - 2, 1); break;
case "6months": from = new Date(year, month - 5, 1); break; case "6months": from = new Date(year, month - 5, 1); break;
case "year": from = new Date(year, 0, 1); break;
case "12months": from = new Date(year, month - 11, 1); break; case "12months": from = new Date(year, month - 11, 1); break;
default: from = new Date(year, month, 1); break; default: from = new Date(year, month, 1); break;
} }

View file

@ -247,7 +247,7 @@ export interface ImportReport {
// --- Dashboard Types --- // --- Dashboard Types ---
export type DashboardPeriod = "month" | "3months" | "6months" | "12months" | "all" | "custom"; export type DashboardPeriod = "month" | "3months" | "6months" | "year" | "12months" | "all" | "custom";
export interface DashboardSummary { export interface DashboardSummary {
totalCount: number; totalCount: number;