From a956cb90a1f0a6d96c4c9fdbbf2f5034bdc06f3a Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Thu, 26 Feb 2026 21:08:30 +0330 Subject: [PATCH] feat(commission): add per-package filtering to commission pages - CommissionDtos: add PackageId + PackageTitle to CommissionPayoutDto and WeeklyBalanceDto - CommissionService: add packageId parameter to GetMyCommissionPayoutsAsync and GetMyWeeklyBalanceAsync - CommissionDashboardPage: add package filter dropdown + package column in desktop/mobile views - WeeklyBalancePage: add package filter dropdown + package chip in balance info section - Update NuGet Foursat.CMSMicroservice.Protobuf to v0.0.187 --- src/FrontOffice.Main/FrontOffice.Main.csproj | 2 +- .../Commission/CommissionDashboardPage.razor | 25 ++++++++++++++--- .../CommissionDashboardPage.razor.cs | 20 +++++++++++++- .../Pages/Commission/WeeklyBalancePage.razor | 26 +++++++++++------- .../Commission/WeeklyBalancePage.razor.cs | 19 ++++++++++++- .../Utilities/CommissionDtos.cs | 4 +++ .../Utilities/CommissionService.cs | 27 +++++++++++++++---- 7 files changed, 102 insertions(+), 21 deletions(-) diff --git a/src/FrontOffice.Main/FrontOffice.Main.csproj b/src/FrontOffice.Main/FrontOffice.Main.csproj index 5c186a9..9f61d09 100644 --- a/src/FrontOffice.Main/FrontOffice.Main.csproj +++ b/src/FrontOffice.Main/FrontOffice.Main.csproj @@ -11,7 +11,7 @@ - + diff --git a/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor b/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor index bd0dda9..555fc50 100644 --- a/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor +++ b/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor @@ -13,7 +13,7 @@ - + - + همه در انتظار @@ -34,7 +34,16 @@ لغو شده - + + + همه پکیج‌ها + @foreach (var pkg in _packages) + { + @pkg.Title + } + + + اعمال فیلتر @@ -87,6 +96,7 @@ هفته + پکیج امتیاز مبلغ (تومان) وضعیت @@ -97,6 +107,11 @@ @context.WeekDisplayName + + + @(string.IsNullOrEmpty(context.PackageTitle) ? "-" : context.PackageTitle) + + @context.BalancesEarned @context.AmountFormatted @@ -127,6 +142,10 @@ @payout.WeekDisplayName @payout.StatusText + @if (!string.IsNullOrEmpty(payout.PackageTitle)) + { + @payout.PackageTitle + } @payout.AmountFormatted امتیاز: @payout.BalancesEarned diff --git a/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor.cs b/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor.cs index f93ee92..15e5b36 100644 --- a/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor.cs +++ b/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor.cs @@ -8,8 +8,10 @@ namespace FrontOffice.Main.Pages.Commission; public partial class CommissionDashboardPage : ComponentBase { [Inject] private CommissionService CommissionService { get; set; } = default!; + [Inject] private PackageService PackageService { get; set; } = default!; private List _payouts = new(); + private List _packages = new(); private int _totalCount; private long _totalAmount; private int _pageNumber = 1; @@ -19,12 +21,26 @@ public partial class CommissionDashboardPage : ComponentBase private WeekSelector? _weekSelector; private WeekDefinitionDto? _selectedWeekDefinition; private string _filterStatus = string.Empty; + private long? _filterPackageId; protected override async Task OnInitializedAsync() { + await LoadPackagesAsync(); await LoadPayoutsAsync(); } + private async Task LoadPackagesAsync() + { + try + { + _packages = await PackageService.GetAllPackagesAsync(); + } + catch + { + _packages = new List(); + } + } + private async Task LoadPayoutsAsync() { try @@ -35,7 +51,8 @@ public partial class CommissionDashboardPage : ComponentBase weekDefinitionId, _filterStatus, _pageNumber, - _pageSize + _pageSize, + _filterPackageId ); _payouts = result.Payouts; _totalCount = result.TotalCount; @@ -61,6 +78,7 @@ public partial class CommissionDashboardPage : ComponentBase { _selectedWeekDefinition = null; _filterStatus = string.Empty; + _filterPackageId = null; _pageNumber = 1; await LoadPayoutsAsync(); } diff --git a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor index 0e7d9cb..869ec0d 100644 --- a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor +++ b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor @@ -12,7 +12,7 @@ - + - @* *@ - @* *@ - @* هفته جاری *@ - @* *@ - @* *@ + + + همه پکیج‌ها + @foreach (var pkg in _packages) + { + @pkg.Title + } + + پایان: @_weeklyBalance.EndDatePersian + @if (!string.IsNullOrEmpty(_weeklyBalance.PackageTitle)) + { + + @_weeklyBalance.PackageTitle + + } diff --git a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs index 2323e76..d7c0892 100644 --- a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs +++ b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs @@ -8,6 +8,7 @@ namespace FrontOffice.Main.Pages.Commission; public partial class WeeklyBalancePage : ComponentBase { [Inject] private CommissionService CommissionService { get; set; } = default!; + [Inject] private PackageService PackageService { get; set; } = default!; [Inject] private ISnackbar SnackbarService { get; set; } = default!; [Parameter] @@ -17,6 +18,8 @@ public partial class WeeklyBalancePage : ComponentBase private WeekSelector? _weekSelector; private WeekDefinitionDto? _selectedWeekDefinition; private WeeklyBalanceDto? _weeklyBalance; + private List _packages = new(); + private long? _filterPackageId; private bool _isLoading = true; private bool _hasError = false; @@ -34,6 +37,8 @@ public partial class WeeklyBalancePage : ComponentBase { if (firstRender) { + await LoadPackagesAsync(); + // Wait for WeekSelector to initialize and load its cached weeks if (_weekSelector != null) { @@ -88,7 +93,7 @@ public partial class WeeklyBalancePage : ComponentBase long? weekDefinitionId = _selectedWeekDefinition?.Id; - _weeklyBalance = await CommissionService.GetMyWeeklyBalanceAsync(weekDefinitionId); + _weeklyBalance = await CommissionService.GetMyWeeklyBalanceAsync(weekDefinitionId, _filterPackageId); // Update week display name from selected definition if available if (_selectedWeekDefinition != null && _weeklyBalance != null) @@ -113,6 +118,18 @@ public partial class WeeklyBalancePage : ComponentBase } } + private async Task LoadPackagesAsync() + { + try + { + _packages = await PackageService.GetAllPackagesAsync(); + } + catch + { + _packages = new(); + } + } + private async Task LoadCurrentWeekAsync() { if (_weekSelector != null) diff --git a/src/FrontOffice.Main/Utilities/CommissionDtos.cs b/src/FrontOffice.Main/Utilities/CommissionDtos.cs index b546ed3..19c78e2 100644 --- a/src/FrontOffice.Main/Utilities/CommissionDtos.cs +++ b/src/FrontOffice.Main/Utilities/CommissionDtos.cs @@ -15,6 +15,8 @@ public class CommissionPayoutDto public string AmountFormatted { get; set; } = string.Empty; public int Status { get; set; } public string DatePersian { get; set; } = string.Empty; + public long PackageId { get; set; } + public string PackageTitle { get; set; } = string.Empty; // Computed properties for UI public string StatusText => Status switch @@ -69,6 +71,8 @@ public class WeeklyBalanceDto public int RightNewMembers { get; set; } public DateTime StartDate { get; set; } public DateTime EndDate { get; set; } + public long PackageId { get; set; } + public string PackageTitle { get; set; } = string.Empty; // Formatted properties public string LeftBalanceFormatted => $"{LeftBalance:N0} "; diff --git a/src/FrontOffice.Main/Utilities/CommissionService.cs b/src/FrontOffice.Main/Utilities/CommissionService.cs index daea7ff..53ca510 100644 --- a/src/FrontOffice.Main/Utilities/CommissionService.cs +++ b/src/FrontOffice.Main/Utilities/CommissionService.cs @@ -78,7 +78,8 @@ public class CommissionService long? weekDefinitionId, string? status, int pageNumber, - int pageSize) + int pageSize, + long? packageId = null) { try { @@ -107,6 +108,11 @@ public class CommissionService _ => null }; } + + if (packageId.HasValue && packageId.Value > 0) + { + request.PackageId = packageId.Value; + } var response = await _client.GetMyCommissionPayoutsAsync(request); @@ -121,7 +127,9 @@ public class CommissionService TotalAmount = p.TotalAmount, AmountFormatted = p.AmountFormatted, Status = p.Status, - DatePersian = p.DatePersian + DatePersian = p.DatePersian, + PackageId = p.PackageId, + PackageTitle = p.PackageTitle }).ToList(), TotalCount = (int)(response.MetaData?.TotalCount ?? 0), PageNumber = pageNumber, @@ -145,7 +153,7 @@ public class CommissionService /// Get weekly balance details for a specific week /// Maps to: CommissionCQ.GetMyWeeklyBalances /// - public async Task GetMyWeeklyBalanceAsync(long? weekDefinitionId = null) + public async Task GetMyWeeklyBalanceAsync(long? weekDefinitionId = null, long? packageId = null) { try { @@ -163,6 +171,11 @@ public class CommissionService { request.WeekDefinitionId=7; } + + if (packageId.HasValue && packageId.Value > 0) + { + request.PackageId = packageId.Value; + } var response = await _client.GetMyWeeklyBalancesAsync(request); @@ -183,7 +196,9 @@ public class CommissionService LeftNewMembers = balance.LeftLegNewMembers, RightNewMembers = balance.RightLegNewMembers, StartDate = balance.CalculatedAt?.ToDateTime().AddDays(-7) ?? DateTime.Now.AddDays(-7), - EndDate = balance.CalculatedAt?.ToDateTime() ?? DateTime.Now + EndDate = balance.CalculatedAt?.ToDateTime() ?? DateTime.Now, + PackageId = balance.PackageId, + PackageTitle = balance.PackageTitle }; } @@ -227,7 +242,9 @@ public class CommissionService TotalAmount = p.TotalAmount, AmountFormatted = p.AmountFormatted, Status = p.Status, - DatePersian = p.DatePersian + DatePersian = p.DatePersian, + PackageId = p.PackageId, + PackageTitle = p.PackageTitle }).ToList(); } catch