29d7b29cfa
- dashboard: periyot seçici ve kümülatif/dönemsel görünüm, tablo; günlük plan kartı sadeleşti - /raporlar özet ve kategori, trend, kişi/hesap, bütçe sayfaları; ay seçici ve CSV indirme Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
import { csvContext, csvPct, csvResponse, forbidden, unauthorized } from "@/features/reports/csv";
|
|
import { getPeopleAccountsReport } from "@/features/reports/service";
|
|
import { tr } from "@/i18n/tr";
|
|
import { csvMoney, toCsv } from "@/shared/csv";
|
|
|
|
/** GET /raporlar/kisi-hesap/csv?ay=YYYY-MM&tablo=kisi|hesap */
|
|
export async function GET(request: Request) {
|
|
const c = await csvContext(request);
|
|
if (!c) return unauthorized();
|
|
const r = await getPeopleAccountsReport(c.userId, c.householdId, c.month);
|
|
if (!r) return forbidden();
|
|
const h = tr.reports.csvHeaders;
|
|
if (c.params.get("tablo") === "hesap")
|
|
return csvResponse(
|
|
toCsv(
|
|
h.accounts,
|
|
r.accounts.map((a) => [
|
|
a.name,
|
|
csvMoney(a.incomeMinor),
|
|
csvMoney(a.expenseMinor),
|
|
csvMoney(a.transferInMinor),
|
|
csvMoney(a.transferOutMinor),
|
|
csvMoney(a.netMinor),
|
|
a.count,
|
|
]),
|
|
),
|
|
tr.reports.csvFiles.accounts(r.month),
|
|
);
|
|
return csvResponse(
|
|
toCsv(
|
|
h.people,
|
|
r.people.map((p) => [p.name, csvMoney(p.expenseMinor), p.count, csvPct(p.sharePct)]),
|
|
),
|
|
tr.reports.csvFiles.people(r.month),
|
|
);
|
|
}
|