feat: اصلاح سند payment corrections + audit-log & daily P&L views
CI/CD / CI · API (dotnet build + test) (push) Successful in 51s
CI/CD / CI · Admin API (dotnet build) (push) Successful in 31s
CI/CD / CI · Dashboard (tsc) (push) Failing after 1m12s
CI/CD / CI · Admin Web (tsc) (push) Successful in 40s
CI/CD / CI · Website (tsc) (push) Successful in 46s
CI/CD / CI · Koja (tsc) (push) Successful in 51s
CI/CD / Deploy · all services (push) Has been skipped

Backend:
- POST /orders/{id}/payments/corrections (Manager/Owner): void wrong
  payments (marked Refunded, never deleted) and/or record replacements
  atomically; mandatory reason; requires an open register shift; full
  before/after written to the immutable audit trail.
- GET /orders/closed?date= — closed orders of one Iran-calendar day,
  paged, the browsing surface for corrections.
- CalculateExpectedCash now subtracts cash refunds so corrections keep
  the drawer expectation honest.

Dashboard (reports screen now has three tabs):
- عملکرد و سود: existing KPIs/charts + new day-by-day breakdown table
  (orders, revenue, expenses, net profit per Jalali day).
- اصلاح سند: closed-orders browser with payment chips + correction
  dialog (void checkboxes, replacement rows, live balance, reason).
- گزارش عملیات: filterable audit-log viewer (category, Jalali range,
  branch) with expandable structured details.

fa/en/ar translations included. 86 backend tests pass; dashboard tsc clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
soroush.asadi
2026-06-12 01:24:19 +03:30
parent 2a4cf1d20b
commit c47922414a
11 changed files with 1367 additions and 14 deletions
+74 -1
View File
@@ -529,7 +529,80 @@
"csvNetIncome": "صافي الدخل",
"csvVoids": "الإلغاءات",
"csvVoidAmount": "مبلغ الإلغاء",
"csvExpenses": "المصروفات"
"csvExpenses": "المصروفات",
"tabs": {
"performance": "الأداء والأرباح",
"corrections": "تصحيح المستندات",
"auditLog": "سجل العمليات"
},
"dailyBreakdownTitle": "التفصيل اليومي — المبيعات والمصروفات والأرباح",
"colDate": "التاريخ",
"colOrders": "الطلبات",
"colExpenses": "المصروفات",
"colNet": "صافي الربح",
"corrections": {
"date": "التاريخ",
"branch": "الفرع",
"allBranches": "كل الفروع",
"hint": "ابحث عن الطلب ذي الدفعة الخاطئة واضغط «تصحيح».",
"loadFailed": "فشل تحميل الطلبات.",
"retry": "إعادة المحاولة",
"empty": "لا توجد طلبات مغلقة في هذا اليوم.",
"colOrder": "الطلب",
"colTime": "الوقت",
"colStatus": "الحالة",
"colTotal": "المبلغ",
"colPayments": "الدفعات",
"table": "طاولة",
"statusPaid": "مسدّد",
"statusCancelled": "ملغى",
"correctAction": "تصحيح",
"prevPage": "السابق",
"nextPage": "التالي",
"dialogTitle": "تصحيح مستند الدفع",
"orderTotal": "مبلغ الطلب",
"voidSection": "الدفعات الخاطئة (اختر للإلغاء)",
"replacementSection": "الدفعات البديلة",
"addReplacement": "إضافة",
"noReplacements": "اتركه فارغاً إذا كنت تُلغي فقط.",
"method": "طريقة الدفع",
"amount": "المبلغ",
"removeReplacement": "حذف الصف",
"reason": "سبب التصحيح (إلزامي)",
"reasonPlaceholder": "مثلاً: سُجّلت نقداً بالخطأ وكان الدفع بالبطاقة",
"paidAfter": "إجمالي المدفوع بعد التصحيح",
"shortBy": "أقل من مبلغ الطلب بـ",
"overBy": "أكثر من مبلغ الطلب بـ",
"cancel": "إلغاء",
"submit": "تسجيل التصحيح",
"saved": "تم تسجيل التصحيح.",
"saveFailed": "فشل تسجيل التصحيح."
},
"auditLog": {
"category": "الفئة",
"allCategories": "الكل",
"categories": {
"Payment": "الدفع",
"Order": "الطلب",
"Register": "الصندوق",
"Staff": "الموظفون"
},
"fromDate": "من",
"toDate": "إلى",
"branch": "الفرع",
"allBranches": "كل الفروع",
"loadFailed": "فشل تحميل سجل العمليات.",
"retry": "إعادة المحاولة",
"empty": "لا يوجد شيء مسجّل.",
"colTime": "الوقت",
"colCategory": "الفئة",
"colActor": "المستخدم",
"colSummary": "الوصف",
"details": "التفاصيل",
"systemActor": "النظام",
"prevPage": "السابق",
"nextPage": "التالي"
}
},
"expenses": {
"title": "المصروفات",