feat(reports): add reports page and export notification downloads

This commit is contained in:
2026-04-27 16:15:41 +03:30
parent 4befb50eb7
commit 61a1dc238d
13 changed files with 1978 additions and 9 deletions

View File

@@ -243,6 +243,7 @@ export const fa = {
sidebar: {
timesheet: 'تایم‌شیت',
reports: 'گزارش‌ها',
workspaces: 'ورک‌اسپیس‌ها',
clients: 'مشتریان',
projects: "پروژه‌ها",
@@ -410,6 +411,56 @@ export const fa = {
fromFilterPrefix: "از",
toFilterPrefix: "تا",
},
reports: {
title: "گزارش‌ها",
description: (workspaceName: string) => `مرور گزارش فعالیت برای ${workspaceName}`,
selectWorkspace: "لطفاً ابتدا یک ورک‌اسپیس انتخاب کنید.",
chartTab: "نمودار",
tableTab: "جدول",
period: "بازه",
periodThisWeek: "این هفته",
periodThisMonth: "این ماه",
periodThisYear: "این سال",
periodFirstHalf: "نیمه اول سال",
periodSecondHalf: "نیمه دوم سال",
periodCustom: "بازه دلخواه",
fromDate: "از تاریخ",
toDate: "تا تاریخ",
user: "کاربر",
allUsers: "همه کاربران",
searchUsers: "جست‌وجوی کاربران...",
client: "مشتری",
allClients: "همه مشتری‌ها",
searchClients: "جست‌وجوی مشتری‌ها...",
project: "پروژه",
allProjects: "همه پروژه‌ها",
searchProjects: "جست‌وجوی پروژه‌ها...",
tags: "تگ‌ها",
allTags: "همه تگ‌ها",
searchTags: "جست‌وجوی تگ‌ها...",
name: "نام",
clear: "پاک کردن",
apply: "اعمال",
totalHours: "مجموع ساعت",
billableHours: "ساعات کاری",
nonBillableHours: "ساعات غیر کاری",
totalIncome: "مجموع درآمد",
chartTitle: "نمودار فعالیت",
totalSeconds: "مجموع ثانیه",
exportExcel: "خروجی Excel",
exportPdf: "خروجی PDF",
date: "تاریخ",
details: "جزئیات",
total: "مجموع",
clientsTable: "مشتری‌ها",
projectsTable: "پروژه‌ها",
tagsTable: "تگ‌ها",
loadError: "دریافت گزارش‌ها با خطا مواجه شد.",
loadDayDetailsError: "دریافت جزئیات روز با خطا مواجه شد.",
loadFiltersError: "دریافت فیلترهای گزارش با خطا مواجه شد.",
exportQueued: "درخواست خروجی ثبت شد. پیوند دانلود از طریق اعلان ارسال می‌شود.",
exportError: "ثبت درخواست خروجی با خطا مواجه شد.",
},
notifications: {
title: "اعلان‌ها",
open: "باز کردن اعلان‌ها",
@@ -419,10 +470,11 @@ export const fa = {
loadMore: "بارگذاری بیشتر",
markAllRead: "خواندن همه",
markSeenError: "به‌روزرسانی اعلان با خطا مواجه شد.",
markAllError: "به‌روزرسانی اعلان‌ها با خطا مواجه شد.",
deleteError: "حذف اعلان با خطا مواجه شد.",
loadError: "دریافت اعلان‌ها با خطا مواجه شد.",
newTitle: "اعلان جدید",
markAllError: "به‌روزرسانی اعلان‌ها با خطا مواجه شد.",
deleteError: "حذف اعلان با خطا مواجه شد.",
loadError: "دریافت اعلان‌ها با خطا مواجه شد.",
openError: "باز کردن اعلان با خطا مواجه شد.",
newTitle: "اعلان جدید",
openAction: "باز کردن",
summary: (total: number, unread: number) => `${total} کل، ${unread} خوانده‌نشده`,
},