diff --git a/src/api/reports.ts b/src/api/reports.ts index a1c6309..d28bec3 100644 --- a/src/api/reports.ts +++ b/src/api/reports.ts @@ -58,6 +58,7 @@ export interface DailyReportRow { billable_duration: string; non_billable_duration: string; total_duration: string; + latest_hourly_rate: CurrencyTotal | null; income_totals: CurrencyTotal[]; } diff --git a/src/components/reports/ReportsTablePanel.tsx b/src/components/reports/ReportsTablePanel.tsx index 17bbb4f..8809b26 100644 --- a/src/components/reports/ReportsTablePanel.tsx +++ b/src/components/reports/ReportsTablePanel.tsx @@ -43,6 +43,14 @@ const formatMoneyTotals = (totals: { currency: string; amount: string }[], lang: return totals.map((item) => `${formatAmount(item.amount, lang)} ${currencyLabel(item.currency, lang)}`).join(" | "); }; +const formatHourlyRate = ( + rate: { currency: string; amount: string } | null, + lang: "en" | "fa", +) => { + if (!rate) return "-"; + return `${formatAmount(rate.amount, lang)} ${currencyLabel(rate.currency, lang)}`; +}; + const formatDisplayDate = (value: string, lang: "en" | "fa") => { const parsed = new Date(`${value}T00:00:00`); return new Intl.DateTimeFormat(lang === "fa" ? "fa-IR" : "en-US", { @@ -209,6 +217,10 @@ export function ReportsTablePanel({
{labels.nonBillableHours}
{localizeDigits(day.non_billable_duration, lang)}
+
+
{labels.hourlyRate}
+
{formatHourlyRate(day.latest_hourly_rate, lang)}
+
{labels.totalIncome}
{formatMoneyTotals(day.income_totals, lang)}
@@ -249,9 +261,10 @@ export function ReportsTablePanel({ {labels.date} - {labels.billableHours} - {labels.nonBillableHours} - {labels.totalIncome} + {labels.billableHours} + {labels.nonBillableHours} + {labels.hourlyRate} + {labels.totalIncome} {labels.details} @@ -264,6 +277,7 @@ export function ReportsTablePanel({ {formatDisplayDate(day.date, lang)} {localizeDigits(day.billable_duration, lang)} {localizeDigits(day.non_billable_duration, lang)} + {formatHourlyRate(day.latest_hourly_rate, lang)} {formatMoneyTotals(day.income_totals, lang)}