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
This commit is contained in:
@@ -138,7 +138,7 @@
|
||||
|
||||
<!-- CMS Protobuf NuGet package (used for both local dev and Docker builds) -->
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.186" />
|
||||
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.187" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
@using CMSMicroservice.Protobuf.Protos.Package
|
||||
|
||||
<MudSelect T="long?"
|
||||
Label="@Label"
|
||||
Value="@SelectedPackageId"
|
||||
ValueChanged="OnValueChanged"
|
||||
Variant="Variant.Outlined"
|
||||
Margin="Margin.Dense"
|
||||
Clearable="true"
|
||||
Style="min-width: 160px;">
|
||||
<MudSelectItem T="long?" Value="@((long?)null)">همه پکیجها</MudSelectItem>
|
||||
@foreach (var pkg in _packages)
|
||||
{
|
||||
<MudSelectItem T="long?" Value="@((long?)pkg.Id)">@pkg.Title</MudSelectItem>
|
||||
}
|
||||
</MudSelect>
|
||||
@@ -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<long?> SelectedPackageIdChanged { get; set; }
|
||||
|
||||
private List<GetAllPackageByFilterResponseModel> _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<GetAllPackageByFilterResponseModel>();
|
||||
}
|
||||
catch
|
||||
{
|
||||
_packages = new List<GetAllPackageByFilterResponseModel>();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task OnValueChanged(long? value)
|
||||
{
|
||||
SelectedPackageId = value;
|
||||
await SelectedPackageIdChanged.InvokeAsync(value);
|
||||
}
|
||||
}
|
||||
@@ -36,6 +36,8 @@
|
||||
<MudSelectItem T="int?" Value="@((int?)4)">شکست خورده</MudSelectItem>
|
||||
<MudSelectItem T="int?" Value="@((int?)5)">لغو شده</MudSelectItem>
|
||||
</MudSelect>
|
||||
<PackageSelect Label="پکیج"
|
||||
@bind-SelectedPackageId="_filterPackageId" />
|
||||
<MudButton Variant="Variant.Filled"
|
||||
Color="Color.Primary"
|
||||
OnClick="ApplyFilter"
|
||||
@@ -64,6 +66,14 @@
|
||||
</CellTemplate>
|
||||
</PropertyColumn>
|
||||
|
||||
<PropertyColumn Property="x => x.PackageTitle" Title="پکیج">
|
||||
<CellTemplate>
|
||||
<MudChip T="string" Color="Color.Tertiary" Size="Size.Small">
|
||||
@(string.IsNullOrEmpty(context.Item.PackageTitle) ? "-" : context.Item.PackageTitle)
|
||||
</MudChip>
|
||||
</CellTemplate>
|
||||
</PropertyColumn>
|
||||
|
||||
<PropertyColumn Property="x => x.BalancesEarned" Title="بالانسها">
|
||||
<CellTemplate>
|
||||
<MudChip T="string" Color="Color.Info" Size="Size.Small">
|
||||
|
||||
@@ -17,6 +17,7 @@ public partial class UserPayouts
|
||||
private long? _filterUserId;
|
||||
private long? _filterWeekDefinitionId;
|
||||
private int? _filterStatus;
|
||||
private long? _filterPackageId;
|
||||
|
||||
private async Task<GridData<UserCommissionPayoutModel>> ServerReload(GridState<UserCommissionPayoutModel> 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())
|
||||
|
||||
@@ -33,10 +33,8 @@
|
||||
Min="0" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="2">
|
||||
<MudNumericField @bind-Value="_maxBalance"
|
||||
Label="حداکثر موجودی"
|
||||
Variant="Variant.Outlined"
|
||||
Min="0" />
|
||||
<PackageSelect Label="پکیج"
|
||||
@bind-SelectedPackageId="_filterPackageId" />
|
||||
</MudItem>
|
||||
<MudItem xs="12" md="2" Class="d-flex align-center">
|
||||
<MudButton Variant="Variant.Filled"
|
||||
@@ -72,6 +70,14 @@
|
||||
<PropertyColumn Property="x => x.UserFullName" Title="نام کاربر" />
|
||||
<PropertyColumn Property="x => x.WeekDisplayName" Title="هفته" />
|
||||
|
||||
<PropertyColumn Property="x => x.PackageTitle" Title="پکیج">
|
||||
<CellTemplate>
|
||||
<MudChip T="string" Color="Color.Tertiary" Size="Size.Small">
|
||||
@(string.IsNullOrEmpty(context.Item.PackageTitle) ? "-" : context.Item.PackageTitle)
|
||||
</MudChip>
|
||||
</CellTemplate>
|
||||
</PropertyColumn>
|
||||
|
||||
<TemplateColumn Title="چپ (جدید + قبلی = مجموع)">
|
||||
<CellTemplate>
|
||||
<MudStack Row="true" Spacing="1" AlignItems="AlignItems.Center">
|
||||
@@ -193,6 +199,7 @@
|
||||
private MudDataGrid <UserWeeklyBalanceModel> _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 <UserWeeklyBalanceModel> _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 <UserWeeklyBalanceModel> _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 <UserWeeklyBalanceModel> _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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user