Implement Persian Date Conversion and Enhance User Network Information Service
- Added PersianDateTimeService for converting Gregorian dates to Persian format in the BackOffice frontend. - Updated multiple frontend pages (Dashboard, UserPayouts, WorkerControl, UserNetworkInfo) to utilize the new Persian date service. - Enhanced GetUserNetworkPositionDto with 28+ new fields for comprehensive user network data. - Updated GetUserNetworkPositionQueryHandler to include new methods for calculating network statistics. - Modified Protobuf messages to accommodate the new fields, increasing from 14 to 42. - Refined week number calculation algorithm to ensure consistency across C# and SQL implementations. - Created new CSV and Excel files for binary plan calculations. - Ensured all changes are tested and validated for accuracy and performance.
This commit is contained in:
@@ -2,7 +2,35 @@
|
||||
|
||||
> **FrontOffice**: رابط کاربری Blazor Server برای مشتریان نهایی سیستم FourSat
|
||||
>
|
||||
> **آخرین بروزرسانی**: ۱۴ آذر ۱۴۰۴
|
||||
> **آخرین بروزرسانی**: ۲۸ آذر ۱۴۰۴ (18 دسامبر 2025)
|
||||
|
||||
---
|
||||
|
||||
## 🆕 تغییرات اخیر (۲۸ آذر ۱۴۰۴)
|
||||
|
||||
### ✅ نمودار درختی شبکه با d3-org-chart
|
||||
- **کتابخانه**: d3-org-chart v3 + d3.js v7 + d3-flextree
|
||||
- **OrganizationChart.razor**: بازنویسی کامل با JS Interop
|
||||
- **امکانات**:
|
||||
- نمایش درختی باینری شبکه
|
||||
- دکمههای: باز کردن همه، بستن همه، مرکز، نمایش کامل، بروزرسانی
|
||||
- انتخاب عمق درخت (2-10 سطح)
|
||||
- کلیک روی نود برای دیدن زیرمجموعهها
|
||||
- دکمههای بازگشت و "درخت من"
|
||||
- طراحی ریسپانسیو با MudBlazor
|
||||
|
||||
### ✅ API جدید: GetSubordinateTree
|
||||
- **Proto**: `GetSubordinateTreeRequest` با `target_user_id`
|
||||
- **BFF Handler**: `GetSubordinateTreeQueryHandler`
|
||||
- **Frontend Service**: `GetSubordinateTreeAsync(targetUserId, maxDepth)`
|
||||
- **امنیت**: Authentication با JWT (بدون بار اضافی چک زیرمجموعه)
|
||||
|
||||
### ✅ فایلهای جدید/آپدیت شده:
|
||||
- `wwwroot/js/org-chart.js` - JS Interop برای d3-org-chart
|
||||
- `wwwroot/css/org-chart.css` - استایلهای سفارشی نمودار
|
||||
- `Pages/Profile/Components/OrganizationChart.razor` - کامپوننت نمودار
|
||||
- `Pages/Profile/Components/OrganizationChart.razor.cs` - لاجیک کامپوننت
|
||||
- `Utilities/NetworkMembershipService.cs` - متد جدید GetSubordinateTreeAsync
|
||||
|
||||
---
|
||||
|
||||
@@ -10,13 +38,13 @@
|
||||
|
||||
| بخش | وضعیت | درصد تکمیل | فایلها |
|
||||
|-----|-------|------------|---------|
|
||||
| **UI Pages** | ✅ Build موفق | 75% | 24 صفحه |
|
||||
| **BFF Handlers** | ⚠️ نیاز به اصلاح | 60% | 12 Handler |
|
||||
| **Protobuf Packages** | ❌ ناقص | 40% | 3 Package |
|
||||
| **Services** | ⚠️ Mock Data | 50% | 8 Service |
|
||||
| **gRPC Connection** | ❌ غیرفعال | 0% | - |
|
||||
| **UI Pages** | ✅ Build موفق | 85% | 24 صفحه |
|
||||
| **BFF Handlers** | ✅ اصلاح شده | 80% | 14 Handler |
|
||||
| **Protobuf Packages** | ✅ کامل | 90% | 5 Package |
|
||||
| **Services** | ✅ اتصال واقعی | 80% | 8 Service |
|
||||
| **gRPC Connection** | ✅ فعال | 90% | - |
|
||||
|
||||
**🎉 آخرین موفقیت**: Build موفق با 0 error و 113 warning (۱۴ آذر)
|
||||
**🎉 آخرین موفقیت**: نمودار درختی d3-org-chart با کلیک روی نودها (۲۸ آذر)
|
||||
|
||||
---
|
||||
|
||||
@@ -109,12 +137,20 @@ FrontOffice/
|
||||
- محاسبه خودکار هزینه (56M × ماه)
|
||||
- ولیدیشن فرم و رویداد OnActivationSuccess
|
||||
|
||||
### 🌳 Network (2 صفحه)
|
||||
- ⚠️ **Tree.razor** (در Profile): نمایش درخت دودویی
|
||||
- از OrganizationChart component استفاده میکند
|
||||
- **TODO**: باید به NetworkMembershipService.GetMyNetworkTree متصل شود
|
||||
### 🌳 Network (2 صفحه) - **بروزرسانی شده** ✨
|
||||
- ✅ **Tree.razor** (در Profile): نمایش درخت دودویی
|
||||
- **d3-org-chart v3**: کتابخانه حرفهای نمودار سازمانی
|
||||
- **JS Interop**: ارتباط Blazor با JavaScript
|
||||
- **امکانات**:
|
||||
- نمایش درختی با zoom و pan
|
||||
- کلیک روی نود → نمایش زیرمجموعهها
|
||||
- دکمههای عملیاتی (باز کردن، بستن، مرکز، نمایش کامل)
|
||||
- انتخاب عمق (2-10 سطح)
|
||||
- دکمههای بازگشت و "درخت من"
|
||||
- طراحی ریسپانسیو
|
||||
- **متصل به**: `NetworkMembershipService.GetMyNetworkTreeAsync` و `GetSubordinateTreeAsync`
|
||||
|
||||
- ✅ **NetworkStatisticsPage.razor**: آمار شبکه **جدید** ✨
|
||||
- ✅ **NetworkStatisticsPage.razor**: آمار شبکه
|
||||
- 4 کارت آماری (کل، چپ، راست، عمق)
|
||||
- Progress bar برای تعادل پاها
|
||||
- MudChart.Donut برای توزیع
|
||||
@@ -157,10 +193,11 @@ FrontOffice/
|
||||
- `ActivateMembershipAsync(...)`: فعالسازی عضویت
|
||||
- **⚠️ فعلا Mock**: بازمیگرداند `{ IsActive = false }`
|
||||
|
||||
7. **NetworkMembershipService**: مدیریت شبکه
|
||||
7. **NetworkMembershipService**: مدیریت شبکه ✅ **بروزرسانی شده**
|
||||
- `GetMyNetworkTreeAsync(maxDepth)`: درخت شبکه تا عمق 10
|
||||
- `GetSubordinateTreeAsync(targetUserId, maxDepth)`: درخت زیرمجموعه **جدید**
|
||||
- `GetMyNetworkStatisticsAsync()`: آمار کلی شبکه
|
||||
- **⚠️ فعلا Mock**: 5 نود نمونه، 15 چپ + 12 راست = 27 عضو
|
||||
- **✅ متصل به BFF**: gRPC واقعی
|
||||
|
||||
8. **CommissionService**: مدیریت کمیسیون
|
||||
- `GetMyCommissionPayoutsAsync(...)`: لیست پرداختها با فیلتر و صفحهبندی
|
||||
@@ -189,15 +226,17 @@ FrontOffice/
|
||||
- ✅ **ActivateMyClubMembership** (Command)
|
||||
- ⚠️ **مشکل**: Response Mock است، باید از `GetClubMembership` گرفته شود
|
||||
|
||||
#### 2. NetworkMembershipCQ (2 Handler)
|
||||
#### 2. NetworkMembershipCQ (3 Handler) ✅ **کامل شده**
|
||||
- ✅ **GetMyNetworkTree** (Query)
|
||||
- ⚠️ **مشکل بزرگ**: CMS حالا Flat List بر میگرداند نه Tree Structure
|
||||
- 🔧 **نیاز**: باید در BFF یک Tree Builder اضافه شود
|
||||
- Tree Builder پیادهسازی شده
|
||||
- تبدیل Flat List از CMS به Tree Structure
|
||||
|
||||
- ✅ **GetMyNetworkStatistics** (Query)
|
||||
- ⚠️ **مشکل**: CMS دیگر `UserId` نمیگیرد (برای کل شبکه است)
|
||||
- ⚠️ **مشکل**: فیلد `LastMember` وجود ندارد
|
||||
- 🔧 **راه حل**: استفاده از `GetUserNetwork` + `GetNetworkTree`
|
||||
- آمار کامل شبکه
|
||||
|
||||
- ✅ **GetSubordinateTree** (Query) **جدید**
|
||||
- دریافت درخت یک زیرمجموعه
|
||||
- امنیت: فقط با JWT معتبر
|
||||
|
||||
#### 3. CommissionCQ (2 Handler)
|
||||
- ✅ **GetMyCommissionPayouts** (Query)
|
||||
|
||||
Reference in New Issue
Block a user