Dashboard fix, expense system, currency settings, visual upgrade
- Fix Dashboard stat card: show "Budget Remaining" instead of "Budget Spent" with correct remaining value accounting for campaign allocations - Add expense system: budget entries now have income/expense type with server-side split, per-campaign and per-project expense tracking, colored amounts, type filters, and summary bar in Budgets page - Add configurable currency in Settings (SAR default, supports 10 currencies) replacing all hardcoded SAR references across the app - Replace PiggyBank icon with Landmark (culturally appropriate for KSA) - Visual upgrade: mesh background, gradient text, premium stat cards with accent bars, section-card containers, sidebar active glow - UX polish: consistent text-2xl headers, skeleton loaders for Finance and Budgets pages - Finance page: expenses column in campaign/project breakdown tables, ROI accounts for expenses, expense stat card Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,11 +4,13 @@
|
||||
"nav.dashboard": "لوحة التحكم",
|
||||
"nav.campaigns": "الحملات",
|
||||
"nav.finance": "المالية والعائد",
|
||||
"nav.financeDashboard": "لوحة التحكم",
|
||||
"nav.budgets": "الميزانيات",
|
||||
"nav.posts": "إنتاج المحتوى",
|
||||
"nav.assets": "الأصول",
|
||||
"nav.projects": "المشاريع",
|
||||
"nav.tasks": "المهام",
|
||||
"nav.team": "الفريق",
|
||||
"nav.team": "الفرق",
|
||||
"nav.settings": "الإعدادات",
|
||||
"nav.users": "المستخدمين",
|
||||
"nav.logout": "تسجيل الخروج",
|
||||
@@ -46,6 +48,7 @@
|
||||
"dashboard.activeCampaigns": "الحملات النشطة",
|
||||
"dashboard.total": "إجمالي",
|
||||
"dashboard.budgetSpent": "الميزانية المنفقة",
|
||||
"dashboard.budgetRemaining": "الميزانية المتبقية",
|
||||
"dashboard.of": "من",
|
||||
"dashboard.noBudget": "لا توجد ميزانية بعد",
|
||||
"dashboard.overdueTasks": "مهام متأخرة",
|
||||
@@ -170,7 +173,45 @@
|
||||
"tasks.deleted": "تم حذف المهمة بنجاح!",
|
||||
"tasks.statusUpdated": "تم تحديث حالة المهمة!",
|
||||
"tasks.canOnlyEditOwn": "يمكنك فقط تعديل مهامك الخاصة.",
|
||||
|
||||
"tasks.search": "بحث في المهام...",
|
||||
"tasks.board": "لوحة",
|
||||
"tasks.list": "قائمة",
|
||||
"tasks.calendar": "تقويم",
|
||||
"tasks.filters": "الفلاتر",
|
||||
"tasks.allProjects": "جميع المشاريع",
|
||||
"tasks.allBrands": "جميع العلامات",
|
||||
"tasks.allPriorities": "جميع الأولويات",
|
||||
"tasks.allStatuses": "جميع الحالات",
|
||||
"tasks.allAssignees": "جميع المُسندين",
|
||||
"tasks.allCreators": "جميع المنشئين",
|
||||
"tasks.overdue": "متأخر",
|
||||
"tasks.clearFilters": "مسح الفلاتر",
|
||||
"tasks.details": "التفاصيل",
|
||||
"tasks.discussion": "النقاش",
|
||||
"tasks.unscheduled": "غير مجدول",
|
||||
"tasks.today": "اليوم",
|
||||
"tasks.project": "المشروع",
|
||||
"tasks.brand": "العلامة التجارية",
|
||||
"tasks.status": "الحالة",
|
||||
"tasks.creator": "المنشئ",
|
||||
"tasks.assignee": "المُسند إليه",
|
||||
"tasks.commentCount": "{n} تعليقات",
|
||||
"tasks.dueDateRange": "تاريخ الاستحقاق",
|
||||
"tasks.noProject": "بدون مشروع",
|
||||
"tasks.createdBy": "أنشأها",
|
||||
"tasks.startDate": "تاريخ البدء",
|
||||
"tasks.attachments": "المرفقات",
|
||||
"tasks.uploadFile": "رفع ملف",
|
||||
"tasks.setAsThumbnail": "تعيين كصورة مصغرة",
|
||||
"tasks.removeThumbnail": "إزالة الصورة المصغرة",
|
||||
"tasks.thumbnail": "الصورة المصغرة",
|
||||
"tasks.dropOrClick": "اسحب ملفاً أو انقر للرفع",
|
||||
|
||||
"projects.thumbnail": "الصورة المصغرة",
|
||||
"projects.uploadThumbnail": "رفع صورة مصغرة",
|
||||
"projects.changeThumbnail": "تغيير الصورة المصغرة",
|
||||
"projects.removeThumbnail": "إزالة الصورة المصغرة",
|
||||
|
||||
"team.title": "الفريق",
|
||||
"team.members": "أعضاء الفريق",
|
||||
"team.addMember": "إضافة عضو",
|
||||
@@ -250,6 +291,8 @@
|
||||
"settings.noBrands": "لا توجد علامات بعد. أضف أول علامة تجارية.",
|
||||
"settings.moreComingSoon": "المزيد من الإعدادات قريباً",
|
||||
"settings.additionalSettings": "سيتم إضافة إعدادات إضافية للإشعارات وتفضيلات العرض والمزيد هنا.",
|
||||
"settings.currency": "العملة",
|
||||
"settings.currencyHint": "ستُستخدم هذه العملة في جميع الصفحات المالية.",
|
||||
"settings.preferences": "إدارة تفضيلاتك وإعدادات التطبيق",
|
||||
|
||||
"tutorial.skip": "تخطي",
|
||||
@@ -303,5 +346,148 @@
|
||||
"timeline.noItems": "لا توجد عناصر للعرض",
|
||||
"timeline.addItems": "أضف عناصر بتواريخ لعرض الجدول الزمني",
|
||||
"timeline.tracks": "المسارات",
|
||||
"timeline.timeline": "الجدول الزمني"
|
||||
"timeline.timeline": "الجدول الزمني",
|
||||
|
||||
"posts.details": "التفاصيل",
|
||||
"posts.platformsLinks": "المنصات والروابط",
|
||||
"posts.discussion": "النقاش",
|
||||
|
||||
"campaigns.details": "التفاصيل",
|
||||
"campaigns.performance": "الأداء",
|
||||
"campaigns.discussion": "النقاش",
|
||||
"campaigns.name": "الاسم",
|
||||
"campaigns.description": "الوصف",
|
||||
"campaigns.brand": "العلامة التجارية",
|
||||
"campaigns.status": "الحالة",
|
||||
"campaigns.platforms": "المنصات",
|
||||
"campaigns.startDate": "تاريخ البدء",
|
||||
"campaigns.endDate": "تاريخ الانتهاء",
|
||||
"campaigns.budget": "الميزانية",
|
||||
"campaigns.goals": "الأهداف",
|
||||
"campaigns.notes": "ملاحظات",
|
||||
"campaigns.budgetSpent": "المنفق من الميزانية",
|
||||
"campaigns.revenue": "الإيرادات",
|
||||
"campaigns.impressions": "مرات الظهور",
|
||||
"campaigns.clicks": "النقرات",
|
||||
"campaigns.conversions": "التحويلات",
|
||||
"campaigns.createCampaign": "إنشاء حملة",
|
||||
"campaigns.editCampaign": "تعديل الحملة",
|
||||
"campaigns.deleteCampaign": "حذف الحملة؟",
|
||||
"campaigns.deleteConfirm": "هل أنت متأكد من حذف هذه الحملة؟ سيتم حذف جميع البيانات المرتبطة. لا يمكن التراجع.",
|
||||
|
||||
"tracks.details": "التفاصيل",
|
||||
"tracks.metrics": "المقاييس",
|
||||
"tracks.trackName": "اسم المسار",
|
||||
"tracks.type": "النوع",
|
||||
"tracks.platform": "المنصة",
|
||||
"tracks.budgetAllocated": "الميزانية المخصصة",
|
||||
"tracks.status": "الحالة",
|
||||
"tracks.notes": "ملاحظات",
|
||||
"tracks.budgetSpent": "المنفق من الميزانية",
|
||||
"tracks.revenue": "الإيرادات",
|
||||
"tracks.addTrack": "إضافة مسار",
|
||||
"tracks.editTrack": "تعديل المسار",
|
||||
"tracks.deleteTrack": "حذف المسار؟",
|
||||
"tracks.deleteConfirm": "هل أنت متأكد من حذف هذا المسار؟ لا يمكن التراجع.",
|
||||
|
||||
"projects.details": "التفاصيل",
|
||||
"projects.discussion": "النقاش",
|
||||
"projects.name": "الاسم",
|
||||
"projects.description": "الوصف",
|
||||
"projects.brand": "العلامة التجارية",
|
||||
"projects.owner": "المالك",
|
||||
"projects.status": "الحالة",
|
||||
"projects.startDate": "تاريخ البدء",
|
||||
"projects.dueDate": "تاريخ الاستحقاق",
|
||||
"projects.editProject": "تعديل المشروع",
|
||||
"projects.deleteProject": "حذف المشروع؟",
|
||||
"projects.deleteConfirm": "هل أنت متأكد من حذف هذا المشروع؟ لا يمكن التراجع.",
|
||||
|
||||
"team.details": "التفاصيل",
|
||||
"team.workload": "عبء العمل",
|
||||
"team.recentTasks": "المهام الأخيرة",
|
||||
"team.recentPosts": "المنشورات الأخيرة",
|
||||
"team.modules": "الوحدات",
|
||||
"team.selectBrands": "اختر العلامات التجارية...",
|
||||
"team.gridView": "عرض الشبكة",
|
||||
"team.teamsView": "عرض الفرق",
|
||||
"team.unassigned": "غير مُعيّن",
|
||||
|
||||
"modules.marketing": "التسويق",
|
||||
"modules.projects": "المشاريع",
|
||||
"modules.finance": "المالية",
|
||||
|
||||
"teams.title": "الفرق",
|
||||
"teams.teams": "الفرق",
|
||||
"teams.createTeam": "إنشاء فريق",
|
||||
"teams.editTeam": "تعديل الفريق",
|
||||
"teams.deleteTeam": "حذف الفريق؟",
|
||||
"teams.deleteConfirm": "هل أنت متأكد من حذف هذا الفريق؟ لا يمكن التراجع.",
|
||||
"teams.name": "اسم الفريق",
|
||||
"teams.description": "الوصف",
|
||||
"teams.members": "أعضاء",
|
||||
"teams.details": "التفاصيل",
|
||||
"teams.noTeams": "لا توجد فرق بعد",
|
||||
"teams.selectMembers": "بحث عن أعضاء...",
|
||||
|
||||
"dates.today": "اليوم",
|
||||
"dates.yesterday": "أمس",
|
||||
"dates.thisWeek": "هذا الأسبوع",
|
||||
"dates.lastWeek": "الأسبوع الماضي",
|
||||
"dates.thisMonth": "هذا الشهر",
|
||||
"dates.lastMonth": "الشهر الماضي",
|
||||
"dates.thisQuarter": "هذا الربع",
|
||||
"dates.thisYear": "هذا العام",
|
||||
"dates.customRange": "نطاق مخصص",
|
||||
"dates.clearDates": "مسح التواريخ",
|
||||
|
||||
"dashboard.myTasks": "مهامي",
|
||||
"dashboard.projectProgress": "تقدم المشاريع",
|
||||
"dashboard.noProjectsYet": "لا توجد مشاريع بعد",
|
||||
|
||||
"finance.project": "المشروع",
|
||||
"finance.projectBudget": "ميزانية المشروع",
|
||||
"finance.projectBreakdown": "توزيع المشاريع",
|
||||
"finance.budgetFor": "ميزانية لـ",
|
||||
|
||||
"budgets.title": "الميزانيات",
|
||||
"budgets.subtitle": "إضافة وإدارة سجلات الميزانية — تتبع المصدر والوجهة والتخصيص",
|
||||
"budgets.addEntry": "إضافة سجل",
|
||||
"budgets.editEntry": "تعديل السجل",
|
||||
"budgets.deleteEntry": "حذف السجل؟",
|
||||
"budgets.deleteConfirm": "هل أنت متأكد من حذف هذا السجل؟ لا يمكن التراجع.",
|
||||
"budgets.searchEntries": "بحث في السجلات...",
|
||||
"budgets.allCategories": "جميع الفئات",
|
||||
"budgets.allDestinations": "جميع الوجهات",
|
||||
"budgets.noEntries": "لا توجد سجلات ميزانية بعد. أضف أول سجل.",
|
||||
"budgets.noMatch": "لا توجد سجلات تطابق الفلاتر.",
|
||||
"budgets.label": "الوصف",
|
||||
"budgets.labelPlaceholder": "مثال: ميزانية التسويق الربع الأول، شراء معدات...",
|
||||
"budgets.amount": "المبلغ",
|
||||
"budgets.dateReceived": "تاريخ الاستلام",
|
||||
"budgets.source": "المصدر",
|
||||
"budgets.sourcePlaceholder": "مثال: موافقة المدير، الميزانية السنوية...",
|
||||
"budgets.destination": "الوجهة",
|
||||
"budgets.selectDestination": "اختر الوجهة...",
|
||||
"budgets.companyCard": "بطاقة الشركة",
|
||||
"budgets.personalAccount": "حساب شخصي",
|
||||
"budgets.corporateAccount": "حساب الشركة",
|
||||
"budgets.otherDest": "أخرى",
|
||||
"budgets.category": "الفئة",
|
||||
"budgets.linkedTo": "مرتبط بـ",
|
||||
"budgets.noCampaign": "بدون حملة",
|
||||
"budgets.noProject": "بدون مشروع",
|
||||
"budgets.general": "عام",
|
||||
"budgets.notes": "ملاحظات",
|
||||
"budgets.notesPlaceholder": "أي تفاصيل حول هذا السجل...",
|
||||
"budgets.date": "التاريخ",
|
||||
"budgets.type": "النوع",
|
||||
"budgets.income": "دخل",
|
||||
"budgets.expense": "مصروف",
|
||||
"budgets.allTypes": "الكل",
|
||||
"budgets.net": "صافي",
|
||||
"budgets.dateExpensed": "التاريخ",
|
||||
|
||||
"dashboard.expenses": "المصروفات",
|
||||
"finance.expenses": "إجمالي المصروفات"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user