feat: Implement Commission and Network Statistics Pages with DTOs and Services
- Added CommissionDashboardPage and CommissionHistoryPage for displaying commission payouts and history. - Implemented WeeklyBalancePage to show weekly balance details. - Created NetworkStatisticsPage to display network statistics and tree structure. - Developed corresponding services (CommissionService, NetworkMembershipService) for data retrieval. - Introduced DTOs for Commission and Network data structures (CommissionPayoutDto, WeeklyBalanceDto, NetworkStatisticsDto). - Added mock data generation for testing purposes in services. - Enhanced UI with MudBlazor components for better user experience.
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
namespace FrontOffice.Main.Utilities;
|
||||
|
||||
/// <summary>
|
||||
/// Service for Commission operations
|
||||
/// TODO: Connect to FrontOffice.BFF gRPC CommissionCQ
|
||||
/// </summary>
|
||||
public class CommissionService
|
||||
{
|
||||
// TODO: Inject gRPC client when FrontOffice connects to BFF
|
||||
// private readonly CommissionContract.CommissionContractClient _client;
|
||||
|
||||
public CommissionService()
|
||||
{
|
||||
// TODO: Initialize gRPC client
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get commission payouts with pagination and filters
|
||||
/// Maps to: CommissionCQ.GetMyCommissionPayouts
|
||||
/// </summary>
|
||||
public async Task<CommissionPayoutsResponseDto> GetMyCommissionPayoutsAsync(
|
||||
int? weekNumber,
|
||||
string? status,
|
||||
int pageNumber,
|
||||
int pageSize)
|
||||
{
|
||||
// TODO: Replace with actual gRPC call to BFF
|
||||
// var request = new GetMyCommissionPayoutsRequest
|
||||
// {
|
||||
// WeekNumber = weekNumber,
|
||||
// Status = status ?? string.Empty,
|
||||
// PageNumber = pageNumber,
|
||||
// PageSize = pageSize
|
||||
// };
|
||||
// var response = await _client.GetMyCommissionPayoutsAsync(request);
|
||||
// return MapToDto(response);
|
||||
|
||||
await Task.Delay(500); // Simulate network delay
|
||||
|
||||
// Mock data
|
||||
var allPayouts = GenerateMockPayouts(50);
|
||||
|
||||
// Apply filters
|
||||
var filtered = allPayouts.AsEnumerable();
|
||||
if (weekNumber.HasValue)
|
||||
filtered = filtered.Where(p => p.WeekNumber == weekNumber.Value);
|
||||
if (!string.IsNullOrEmpty(status))
|
||||
filtered = filtered.Where(p => p.Status == status);
|
||||
|
||||
var total = filtered.Count();
|
||||
var paged = filtered.Skip((pageNumber - 1) * pageSize).Take(pageSize).ToList();
|
||||
|
||||
return new CommissionPayoutsResponseDto
|
||||
{
|
||||
Payouts = paged,
|
||||
TotalCount = total,
|
||||
PageNumber = pageNumber,
|
||||
PageSize = pageSize
|
||||
};
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Get weekly balance details for a specific week
|
||||
/// Maps to: CommissionCQ.GetMyWeeklyBalances
|
||||
/// </summary>
|
||||
public async Task<WeeklyBalanceDto> GetMyWeeklyBalanceAsync(int? weekNumber = null)
|
||||
{
|
||||
// TODO: Replace with actual gRPC call to BFF
|
||||
// var request = new GetMyWeeklyBalancesRequest
|
||||
// {
|
||||
// WeekNumber = weekNumber
|
||||
// };
|
||||
// var response = await _client.GetMyWeeklyBalancesAsync(request);
|
||||
// return MapToDto(response);
|
||||
|
||||
await Task.Delay(500); // Simulate network delay
|
||||
|
||||
// Mock current week data
|
||||
var currentWeek = weekNumber ?? 45;
|
||||
return new WeeklyBalanceDto
|
||||
{
|
||||
WeekNumber = currentWeek,
|
||||
WeekLabel = $"هفته {currentWeek} - سال 1404",
|
||||
LeftBalance = 15_000_000,
|
||||
RightBalance = 12_000_000,
|
||||
MinBalance = 12_000_000,
|
||||
BalanceCount = 12,
|
||||
CalculatedCommission = 1_200_000,
|
||||
LeftCarryover = 3_000_000,
|
||||
RightCarryover = 0,
|
||||
StartDate = DateTime.Now.AddDays(-7),
|
||||
EndDate = DateTime.Now
|
||||
};
|
||||
}
|
||||
|
||||
#region Mock Data Helpers
|
||||
|
||||
private static List<CommissionPayoutDto> GenerateMockPayouts(int count)
|
||||
{
|
||||
var payouts = new List<CommissionPayoutDto>();
|
||||
var random = new Random();
|
||||
var statuses = new[] { "Created", "Paid", "WithdrawalRequested", "Withdrawn", "Cancelled" };
|
||||
var statusColors = new[] { "Info", "Success", "Warning", "Success", "Error" };
|
||||
var statusTexts = new[] { "ایجاد شده", "پرداخت شده", "درخواست برداشت", "برداشت شده", "لغو شده" };
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
var statusIndex = random.Next(statuses.Length);
|
||||
var weekNumber = 50 - i;
|
||||
var balances = random.Next(5, 20);
|
||||
var amount = balances * 100_000;
|
||||
|
||||
payouts.Add(new CommissionPayoutDto
|
||||
{
|
||||
Id = i + 1,
|
||||
WeekNumber = weekNumber,
|
||||
WeekLabel = $"هفته {weekNumber} - سال 1404",
|
||||
BalancesEarned = balances,
|
||||
TotalAmount = amount,
|
||||
AmountFormatted = $"{amount:N0} تومان",
|
||||
Status = statusTexts[statusIndex],
|
||||
StatusBadgeColor = statusColors[statusIndex],
|
||||
DatePersian = DateTime.Now.AddDays(-i * 7).ToString("yyyy/MM/dd")
|
||||
});
|
||||
}
|
||||
|
||||
return payouts;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user