From 8be98ae33ed1fc36658a185700da4ed8b8a74e9d Mon Sep 17 00:00:00 2001 From: masoodafar-web Date: Thu, 26 Feb 2026 21:08:16 +0330 Subject: [PATCH] feat(commission): add per-package filtering to commission pages - New PackageSelect component: reusable dropdown for package filtering - UserPayouts: add package filter + package column with MudChip - BalancesReport: add package filter + package column with MudChip - Update NuGet Foursat.CMSMicroservice.Protobuf to v0.0.187 --- src/BackOffice/BackOffice.csproj | 2 +- .../Pages/AutoComplete/PackageSelect.razor | 16 +++++++ .../Pages/AutoComplete/PackageSelect.razor.cs | 46 +++++++++++++++++++ .../Pages/Commission/UserPayouts.razor | 10 ++++ .../Pages/Commission/UserPayouts.razor.cs | 6 +++ .../Pages/Network/BalancesReport.razor | 24 ++++++++-- 6 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 src/BackOffice/Pages/AutoComplete/PackageSelect.razor create mode 100644 src/BackOffice/Pages/AutoComplete/PackageSelect.razor.cs diff --git a/src/BackOffice/BackOffice.csproj b/src/BackOffice/BackOffice.csproj index d475ec0..46a32df 100644 --- a/src/BackOffice/BackOffice.csproj +++ b/src/BackOffice/BackOffice.csproj @@ -138,7 +138,7 @@ - + diff --git a/src/BackOffice/Pages/AutoComplete/PackageSelect.razor b/src/BackOffice/Pages/AutoComplete/PackageSelect.razor new file mode 100644 index 0000000..661bb40 --- /dev/null +++ b/src/BackOffice/Pages/AutoComplete/PackageSelect.razor @@ -0,0 +1,16 @@ +@using CMSMicroservice.Protobuf.Protos.Package + + + همه پکیج‌ها + @foreach (var pkg in _packages) + { + @pkg.Title + } + diff --git a/src/BackOffice/Pages/AutoComplete/PackageSelect.razor.cs b/src/BackOffice/Pages/AutoComplete/PackageSelect.razor.cs new file mode 100644 index 0000000..7505e90 --- /dev/null +++ b/src/BackOffice/Pages/AutoComplete/PackageSelect.razor.cs @@ -0,0 +1,46 @@ +using CMSMicroservice.Protobuf.Protos.Package; +using Microsoft.AspNetCore.Components; + +namespace BackOffice.Pages.AutoComplete; + +public partial class PackageSelect +{ + [Inject] public PackageContract.PackageContractClient PackageClient { get; set; } + + [Parameter] public string Label { get; set; } = "پکیج"; + [Parameter] public long? SelectedPackageId { get; set; } + [Parameter] public EventCallback SelectedPackageIdChanged { get; set; } + + private List _packages = new(); + + protected override async Task OnInitializedAsync() + { + await LoadPackages(); + } + + private async Task LoadPackages() + { + try + { + var request = new GetAllPackageByFilterRequest + { + PaginationState = new() { PageNumber = 1, PageSize = 100 }, + Filter = new() + }; + + var result = await PackageClient.GetAllPackageByFilterAsync(request); + _packages = result.Models?.OrderBy(p => p.SortOrder).ToList() + ?? new List(); + } + catch + { + _packages = new List(); + } + } + + private async Task OnValueChanged(long? value) + { + SelectedPackageId = value; + await SelectedPackageIdChanged.InvokeAsync(value); + } +} diff --git a/src/BackOffice/Pages/Commission/UserPayouts.razor b/src/BackOffice/Pages/Commission/UserPayouts.razor index 9553a9f..bc65251 100644 --- a/src/BackOffice/Pages/Commission/UserPayouts.razor +++ b/src/BackOffice/Pages/Commission/UserPayouts.razor @@ -36,6 +36,8 @@ شکست خورده لغو شده + + + + + @(string.IsNullOrEmpty(context.Item.PackageTitle) ? "-" : context.Item.PackageTitle) + + + + diff --git a/src/BackOffice/Pages/Commission/UserPayouts.razor.cs b/src/BackOffice/Pages/Commission/UserPayouts.razor.cs index f60dab9..5ea0975 100644 --- a/src/BackOffice/Pages/Commission/UserPayouts.razor.cs +++ b/src/BackOffice/Pages/Commission/UserPayouts.razor.cs @@ -17,6 +17,7 @@ public partial class UserPayouts private long? _filterUserId; private long? _filterWeekDefinitionId; private int? _filterStatus; + private long? _filterPackageId; private async Task> ServerReload(GridState state) { @@ -44,6 +45,11 @@ public partial class UserPayouts request.Status = _filterStatus.Value; } + if (_filterPackageId.HasValue && _filterPackageId.Value > 0) + { + request.PackageId = _filterPackageId.Value; + } + var result = await CommissionContract.GetUserCommissionPayoutsAsync(request); if (result?.Models != null && result.Models.Any()) diff --git a/src/BackOffice/Pages/Network/BalancesReport.razor b/src/BackOffice/Pages/Network/BalancesReport.razor index 562d9bb..7c882f1 100644 --- a/src/BackOffice/Pages/Network/BalancesReport.razor +++ b/src/BackOffice/Pages/Network/BalancesReport.razor @@ -33,10 +33,8 @@ Min="0" /> - + + + + + @(string.IsNullOrEmpty(context.Item.PackageTitle) ? "-" : context.Item.PackageTitle) + + + + @@ -193,6 +199,7 @@ private MudDataGrid _grid { get; set; } private long? _filterUserId = null; private long? _filterWeekDefinitionId = null; + private long? _filterPackageId = null; private int? _minBalance = null; private int? _maxBalance = null; private bool _onlyActive = false; @@ -222,6 +229,11 @@ private MudDataGrid _grid { get; set; } request.WeekDefinitionId = _filterWeekDefinitionId.Value; } + if (_filterPackageId.HasValue && _filterPackageId.Value > 0) + { + request.PackageId = _filterPackageId.Value; + } + var response = await CommissionClient.GetUserWeeklyBalancesAsync(request); var items = response.Models.Select(b => new UserWeeklyBalanceModel @@ -238,7 +250,8 @@ private MudDataGrid _grid { get; set; } MatchedBalance = b.TotalBalances, PoolContribution = b.WeeklyPoolContribution, CalculatedAt = b.CalculatedAt?.ToDateTime(), - IsExpired = b.IsExpired + IsExpired = b.IsExpired, + PackageTitle = b.PackageTitle }).ToList(); // Apply balance range filter if specified @@ -308,5 +321,6 @@ private MudDataGrid _grid { get; set; } public long PoolContribution { get; set; } public DateTime? CalculatedAt { get; set; } public bool IsExpired { get; set; } + public string PackageTitle { get; set; } = string.Empty; } }