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 -->
<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>
@if (_allWeeks.Any())
@@ -160,6 +160,10 @@
<MudText Color="Color.Warning">لیست هفته‌ها بارگذاری نشده</MudText>
}
<PackageSelect Label="پکیج"
SelectedPackageId="_selectedPackageId"
SelectedPackageIdChanged="OnPackageChanged" />
<MudButton Variant="Variant.Filled"
Color="Color.Primary"
OnClick="LoadPoolData"
@@ -180,6 +184,19 @@
<td><strong>شناسه استخر:</strong></td>
<td>@_poolData.Id</td>
</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>
<td><strong>شماره هفته:</strong></td>
<td>@_currentWeekDisplayName</td>
@@ -3,6 +3,7 @@ using MudBlazor;
using System.Globalization;
using CMSMicroservice.Protobuf.Protos.Commission;
using BackOffice.Services;
using Google.Protobuf.WellKnownTypes;
namespace BackOffice.Pages.Commission;
@@ -22,6 +23,9 @@ public partial class Dashboard
private string _currentWeekDisplayText = string.Empty; // نمایش فارسی
private GetWeeklyCommissionPoolResponse? _poolData;
// Package filter
private long? _selectedPackageId;
// Available weeks data
private CMSMicroservice.Protobuf.Protos.Commission.GetAvailableWeeksResponse? _availableWeeks;
private List<CMSMicroservice.Protobuf.Protos.Commission.WeekInfo> _allWeeks = new();
@@ -91,6 +95,12 @@ public partial class Dashboard
await LoadPoolData();
}
private async Task OnPackageChanged(long? packageId)
{
_selectedPackageId = packageId;
await LoadPoolData();
}
private async Task LoadPoolData()
{
if (_currentWeekDefinitionId <= 0)
@@ -106,7 +116,8 @@ public partial class Dashboard
var request = new GetWeeklyCommissionPoolRequest
{
WeekDefinitionId = _currentWeekDefinitionId
WeekDefinitionId = _currentWeekDefinitionId,
PackageId = _selectedPackageId.HasValue ? Int64Value.FromLong(_selectedPackageId.Value) : null
};
_poolData = await CommissionContract.GetWeeklyCommissionPoolAsync(request);
@@ -126,23 +137,32 @@ public partial class Dashboard
private async Task TriggerCalculation()
{
var packageInfo = _selectedPackageId.HasValue
? $" (فقط پکیج #{_selectedPackageId})"
: " (همه پکیج‌ها)";
var confirmed = await DialogService.ShowMessageBox(
"تایید",
$"آیا از اجرای محاسبه دستی برای هفته {_currentWeekDisplayName} مطمئن هستید؟",
$"آیا از اجرای محاسبه دستی برای هفته {_currentWeekDisplayName}{packageInfo} مطمئن هستید؟",
yesText: "بله", cancelText: "خیر");
if (confirmed == true)
{
try
{
await CommissionContract.TriggerWeeklyCalculationAsync(new TriggerWeeklyCalculationRequest()
var req = new TriggerWeeklyCalculationRequest()
{
WeekDefinitionId = _currentWeekDefinitionId,
ForceRecalculate = true,
SkipBalances = false,
SkipPayouts = false,
SkipPool = false,
});
};
if (_selectedPackageId.HasValue)
req.PackageId = Int64Value.FromLong(_selectedPackageId.Value);
await CommissionContract.TriggerWeeklyCalculationAsync(req);
Snackbar.Add("محاسبه با موفقیت آغاز شد. این عملیات ممکن است چند دقیقه طول بکشد.", Severity.Info);
// Reload data after a delay