feat(wallet-management): add magic wallet charge functionality with enhanced filtering options
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 11m8s
Build and Deploy to Kubernetes / build-and-deploy (push) Successful in 11m8s
- Introduced a new tab for managing magic wallet charges, including user search and transaction ID filters. - Implemented a data grid to display magic wallet charge details, including user information, amounts, and transaction dates. - Updated the project to use Foursat.CMSMicroservice.Protobuf version 0.0.215 for compatibility with recent changes.
This commit is contained in:
@@ -143,7 +143,7 @@
|
||||
<ProjectReference Include="../../../CMS/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj" />
|
||||
</ItemGroup>
|
||||
<ItemGroup Condition="!Exists('../../../CMS/src/CMSMicroservice.Protobuf/CMSMicroservice.Protobuf.csproj')">
|
||||
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.214" />
|
||||
<PackageReference Include="Foursat.CMSMicroservice.Protobuf" Version="0.0.215" />
|
||||
</ItemGroup>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
@page "/wallets"
|
||||
@attribute [Authorize(Roles = "Administrator")]
|
||||
|
||||
@using BackOffice.Common.BaseComponents
|
||||
@using BackOffice.Pages.AutoComplete
|
||||
@using CMSMicroservice.Protobuf.Protos
|
||||
@using CMSMicroservice.Protobuf.Protos.UserWallet
|
||||
@using CMSMicroservice.Protobuf.Protos.UserWalletHistory
|
||||
@using BackOffice.Pages.AutoComplete
|
||||
@using DateTimeConverterCL
|
||||
@using Google.Protobuf.WellKnownTypes
|
||||
|
||||
@inject UserWalletContract.UserWalletContractClient WalletClient
|
||||
@inject UserWalletHistoryContract.UserWalletHistoryContractClient ChangeLogClient
|
||||
@@ -156,6 +160,90 @@
|
||||
</PagerContent>
|
||||
</MudDataGrid>
|
||||
</MudTabPanel>
|
||||
|
||||
@* ── تب سوم: شارژ کیف جادویی ── *@
|
||||
<MudTabPanel Text="شارژ کیف جادویی" Icon="@Icons.Material.Filled.AutoAwesome">
|
||||
<MudStack Row="true" Spacing="2" AlignItems="AlignItems.Center" Class="mb-3 flex-wrap">
|
||||
<UserAutoComplete Label="جستجوی کاربر" @bind-SelectedUserId="_magicFilterUserId" />
|
||||
<MudTextField T="long?" Label="شناسه تراکنش" Variant="Variant.Outlined"
|
||||
Margin="Margin.Dense" @bind-Value="_magicFilterTransactionId"
|
||||
Style="max-width: 160px;" />
|
||||
<MudTextField T="string" Label="RefId" Variant="Variant.Outlined"
|
||||
Margin="Margin.Dense" @bind-Value="_magicFilterRefId"
|
||||
Style="max-width: 180px;" />
|
||||
<DateRangePicker @bind-From="_magicFilterFrom" @bind-To="_magicFilterTo" Label="بازه تاریخ" />
|
||||
<MudButton Variant="Variant.Filled" Color="Color.Primary"
|
||||
StartIcon="@Icons.Material.Filled.Search"
|
||||
OnClick="ApplyMagicFilter">جستجو</MudButton>
|
||||
</MudStack>
|
||||
|
||||
<MudDataGrid T="MagicWalletChargeModel" @ref="_magicGrid"
|
||||
ServerData="LoadMagicCharges"
|
||||
Hover="true" Dense="true"
|
||||
Height="calc(100vh - 340px)">
|
||||
<Columns>
|
||||
<TemplateColumn Title="کاربر">
|
||||
<CellTemplate>
|
||||
<MudStack Spacing="0">
|
||||
<MudText Typo="Typo.body2"><strong>@context.Item.UserName</strong></MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary">ID: @context.Item.UserId</MudText>
|
||||
</MudStack>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="مبلغ شارژ">
|
||||
<CellTemplate>
|
||||
<MudText>@context.Item.DepositAmount.ToString("N0")</MudText>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="ضریب">
|
||||
<CellTemplate>
|
||||
<MudText>@context.Item.Multiplier.ToString("0.0")</MudText>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="مبلغ دریافتی">
|
||||
<CellTemplate>
|
||||
<MudText Color="Color.Success"><strong>@context.Item.CreditedAmount.ToString("N0")</strong></MudText>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="باقیمانده ظرفیت">
|
||||
<CellTemplate>
|
||||
@(context.Item.RemainingCapacity != null
|
||||
? context.Item.RemainingCapacity.Value.ToString("N0")
|
||||
: "—")
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="تاریخ">
|
||||
<CellTemplate>
|
||||
@((context.Item.PaymentDate ?? context.Item.Created)?
|
||||
.ToDateTime().ToLocalTime().MiladiToJalaliWithTime() ?? "—")
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="شناسه تراکنش">
|
||||
<CellTemplate>
|
||||
<MudStack Spacing="0">
|
||||
<MudText Typo="Typo.body2">@context.Item.TransactionId</MudText>
|
||||
<MudText Typo="Typo.caption" Color="Color.Secondary">
|
||||
@(string.IsNullOrWhiteSpace(context.Item.RefId) ? "—" : context.Item.RefId)
|
||||
</MudText>
|
||||
</MudStack>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
<TemplateColumn Title="موجودی بعد از شارژ">
|
||||
<CellTemplate>
|
||||
<MudText Color="Color.Primary">@context.Item.NewBalance.ToString("N0")</MudText>
|
||||
</CellTemplate>
|
||||
</TemplateColumn>
|
||||
</Columns>
|
||||
<NoRecordsContent>
|
||||
<MudAlert Severity="Severity.Info" Dense="true" Variant="Variant.Text" Class="my-4">موردی یافت نشد.</MudAlert>
|
||||
</NoRecordsContent>
|
||||
<PagerContent>
|
||||
<MudDataGridPager T="MagicWalletChargeModel" PageSizeOptions="@(new int[] { 20, 50, 100 })"
|
||||
InfoFormat="سطر {first_item} تا {last_item} از {all_items}"
|
||||
RowsPerPageString="تعداد در صفحه" />
|
||||
</PagerContent>
|
||||
</MudDataGrid>
|
||||
</MudTabPanel>
|
||||
</MudTabs>
|
||||
</div>
|
||||
|
||||
@@ -163,6 +251,7 @@
|
||||
private int _activeTab;
|
||||
private MudDataGrid<GetAllUserWalletByFilterResponseModel>? _walletGrid;
|
||||
private MudDataGrid<GetAllUserWalletHistoryByFilterResponseModel>? _logGrid;
|
||||
private MudDataGrid<MagicWalletChargeModel>? _magicGrid;
|
||||
|
||||
// Wallet filters
|
||||
private long? _filterUserId;
|
||||
@@ -171,6 +260,13 @@
|
||||
private long? _logFilterUserId;
|
||||
private bool? _logFilterIsIncrease;
|
||||
|
||||
// Magic charge filters
|
||||
private long? _magicFilterUserId;
|
||||
private long? _magicFilterTransactionId;
|
||||
private string? _magicFilterRefId;
|
||||
private DateTime? _magicFilterFrom;
|
||||
private DateTime? _magicFilterTo;
|
||||
|
||||
private async Task<GridData<GetAllUserWalletByFilterResponseModel>> LoadWallets(GridState<GetAllUserWalletByFilterResponseModel> state)
|
||||
{
|
||||
try
|
||||
@@ -238,6 +334,52 @@
|
||||
if (_logGrid != null) await _logGrid.ReloadServerData();
|
||||
}
|
||||
|
||||
private async Task<GridData<MagicWalletChargeModel>> LoadMagicCharges(GridState<MagicWalletChargeModel> state)
|
||||
{
|
||||
try
|
||||
{
|
||||
var request = new GetMagicWalletChargesRequest
|
||||
{
|
||||
PaginationState = new PaginationState
|
||||
{
|
||||
PageNumber = state.Page + 1,
|
||||
PageSize = state.PageSize
|
||||
},
|
||||
Filter = new GetMagicWalletChargesFilter()
|
||||
};
|
||||
|
||||
if (_magicFilterUserId.HasValue && _magicFilterUserId.Value > 0)
|
||||
request.Filter.UserId = _magicFilterUserId.Value;
|
||||
if (_magicFilterTransactionId.HasValue)
|
||||
request.Filter.TransactionId = _magicFilterTransactionId.Value;
|
||||
if (!string.IsNullOrWhiteSpace(_magicFilterRefId))
|
||||
request.Filter.RefId = _magicFilterRefId.Trim();
|
||||
if (_magicFilterFrom.HasValue)
|
||||
request.Filter.CreatedFrom = Timestamp.FromDateTime(
|
||||
DateTime.SpecifyKind(_magicFilterFrom.Value, DateTimeKind.Utc));
|
||||
if (_magicFilterTo.HasValue)
|
||||
request.Filter.CreatedTo = Timestamp.FromDateTime(
|
||||
DateTime.SpecifyKind(_magicFilterTo.Value, DateTimeKind.Utc));
|
||||
|
||||
var result = await WalletClient.GetMagicWalletChargesAsync(request);
|
||||
return new GridData<MagicWalletChargeModel>
|
||||
{
|
||||
Items = result?.Models?.ToList() ?? new(),
|
||||
TotalItems = (int)(result?.MetaData?.TotalCount ?? 0)
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Snackbar.Add($"خطا: {ex.Message}", Severity.Error);
|
||||
return new GridData<MagicWalletChargeModel>();
|
||||
}
|
||||
}
|
||||
|
||||
private async Task ApplyMagicFilter()
|
||||
{
|
||||
if (_magicGrid != null) await _magicGrid.ReloadServerData();
|
||||
}
|
||||
|
||||
private void ShowChangeLog(GetAllUserWalletByFilterResponseModel wallet)
|
||||
{
|
||||
_logFilterUserId = wallet.UserId;
|
||||
|
||||
Reference in New Issue
Block a user