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
@@ -557,7 +557,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": "بعدی"
}
},
"shifts": {
"title": "شیفت صندوق",