feat(commission/dashboard): add package selector for per-package calculation
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 11m26s

- Dashboard: added PackageSelect component to filter/trigger calculation per package
- LoadPoolData: now sends PackageId in GetWeeklyCommissionPoolRequest
- TriggerCalculation: now sends PackageId in TriggerWeeklyCalculationRequest
- Pool Details: shows PackageTitle in table
This commit is contained in:
masoodafar-web
2026-04-24 03:43:26 +03:30
parent a8c52db544
commit 3c2a0edca8
2 changed files with 42 additions and 5 deletions
@@ -79,7 +79,7 @@
<!-- Week Selector --> <!-- Week Selector -->
<MudPaper Class="pa-4 mt-4" Elevation="2"> <MudPaper Class="pa-4 mt-4" Elevation="2">
<MudStack Row="true" AlignItems="AlignItems.Center" Spacing="3"> <MudStack Row="true" AlignItems="AlignItems.Center" Spacing="3" Wrap="Wrap.Wrap">
<MudText Typo="Typo.h6">انتخاب هفته:</MudText> <MudText Typo="Typo.h6">انتخاب هفته:</MudText>
@if (_allWeeks.Any()) @if (_allWeeks.Any())
@@ -159,6 +159,10 @@
{ {
<MudText Color="Color.Warning">لیست هفته‌ها بارگذاری نشده</MudText> <MudText Color="Color.Warning">لیست هفته‌ها بارگذاری نشده</MudText>
} }
<PackageSelect Label="پکیج"
SelectedPackageId="_selectedPackageId"
SelectedPackageIdChanged="OnPackageChanged" />
<MudButton Variant="Variant.Filled" <MudButton Variant="Variant.Filled"
Color="Color.Primary" Color="Color.Primary"
@@ -180,6 +184,19 @@
<td><strong>شناسه استخر:</strong></td> <td><strong>شناسه استخر:</strong></td>
<td>@_poolData.Id</td> <td>@_poolData.Id</td>
</tr> </tr>
<tr>
<td><strong>پکیج:</strong></td>
<td>
@if (!string.IsNullOrEmpty(_poolData.PackageTitle))
{
<MudChip T="string" Size="Size.Small" Color="Color.Primary">@_poolData.PackageTitle</MudChip>
}
else
{
<MudText Color="Color.Secondary">-</MudText>
}
</td>
</tr>
<tr> <tr>
<td><strong>شماره هفته:</strong></td> <td><strong>شماره هفته:</strong></td>
<td>@_currentWeekDisplayName</td> <td>@_currentWeekDisplayName</td>
@@ -3,6 +3,7 @@ using MudBlazor;
using System.Globalization; using System.Globalization;
using CMSMicroservice.Protobuf.Protos.Commission; using CMSMicroservice.Protobuf.Protos.Commission;
using BackOffice.Services; using BackOffice.Services;
using Google.Protobuf.WellKnownTypes;
namespace BackOffice.Pages.Commission; namespace BackOffice.Pages.Commission;
@@ -22,6 +23,9 @@ public partial class Dashboard
private string _currentWeekDisplayText = string.Empty; // نمایش فارسی private string _currentWeekDisplayText = string.Empty; // نمایش فارسی
private GetWeeklyCommissionPoolResponse? _poolData; private GetWeeklyCommissionPoolResponse? _poolData;
// Package filter
private long? _selectedPackageId;
// Available weeks data // Available weeks data
private CMSMicroservice.Protobuf.Protos.Commission.GetAvailableWeeksResponse? _availableWeeks; private CMSMicroservice.Protobuf.Protos.Commission.GetAvailableWeeksResponse? _availableWeeks;
private List<CMSMicroservice.Protobuf.Protos.Commission.WeekInfo> _allWeeks = new(); private List<CMSMicroservice.Protobuf.Protos.Commission.WeekInfo> _allWeeks = new();
@@ -91,6 +95,12 @@ public partial class Dashboard
await LoadPoolData(); await LoadPoolData();
} }
private async Task OnPackageChanged(long? packageId)
{
_selectedPackageId = packageId;
await LoadPoolData();
}
private async Task LoadPoolData() private async Task LoadPoolData()
{ {
if (_currentWeekDefinitionId <= 0) if (_currentWeekDefinitionId <= 0)
@@ -106,7 +116,8 @@ public partial class Dashboard
var request = new GetWeeklyCommissionPoolRequest var request = new GetWeeklyCommissionPoolRequest
{ {
WeekDefinitionId = _currentWeekDefinitionId WeekDefinitionId = _currentWeekDefinitionId,
PackageId = _selectedPackageId.HasValue ? Int64Value.FromLong(_selectedPackageId.Value) : null
}; };
_poolData = await CommissionContract.GetWeeklyCommissionPoolAsync(request); _poolData = await CommissionContract.GetWeeklyCommissionPoolAsync(request);
@@ -126,23 +137,32 @@ public partial class Dashboard
private async Task TriggerCalculation() private async Task TriggerCalculation()
{ {
var packageInfo = _selectedPackageId.HasValue
? $" (فقط پکیج #{_selectedPackageId})"
: " (همه پکیج‌ها)";
var confirmed = await DialogService.ShowMessageBox( var confirmed = await DialogService.ShowMessageBox(
"تایید", "تایید",
$"آیا از اجرای محاسبه دستی برای هفته {_currentWeekDisplayName} مطمئن هستید؟", $"آیا از اجرای محاسبه دستی برای هفته {_currentWeekDisplayName}{packageInfo} مطمئن هستید؟",
yesText: "بله", cancelText: "خیر"); yesText: "بله", cancelText: "خیر");
if (confirmed == true) if (confirmed == true)
{ {
try try
{ {
await CommissionContract.TriggerWeeklyCalculationAsync(new TriggerWeeklyCalculationRequest() var req = new TriggerWeeklyCalculationRequest()
{ {
WeekDefinitionId = _currentWeekDefinitionId, WeekDefinitionId = _currentWeekDefinitionId,
ForceRecalculate = true, ForceRecalculate = true,
SkipBalances = false, SkipBalances = false,
SkipPayouts = false, SkipPayouts = false,
SkipPool = false, SkipPool = false,
}); };
if (_selectedPackageId.HasValue)
req.PackageId = Int64Value.FromLong(_selectedPackageId.Value);
await CommissionContract.TriggerWeeklyCalculationAsync(req);
Snackbar.Add("محاسبه با موفقیت آغاز شد. این عملیات ممکن است چند دقیقه طول بکشد.", Severity.Info); Snackbar.Add("محاسبه با موفقیت آغاز شد. این عملیات ممکن است چند دقیقه طول بکشد.", Severity.Info);
// Reload data after a delay // Reload data after a delay