diff --git a/src/BackOffice/BackOffice.csproj b/src/BackOffice/BackOffice.csproj
index 842dfc3..c027d77 100644
--- a/src/BackOffice/BackOffice.csproj
+++ b/src/BackOffice/BackOffice.csproj
@@ -138,7 +138,7 @@
-
+
diff --git a/src/BackOffice/Pages/Commission/UserPayouts.razor b/src/BackOffice/Pages/Commission/UserPayouts.razor
index 2d3349e..a0ddf6b 100644
--- a/src/BackOffice/Pages/Commission/UserPayouts.razor
+++ b/src/BackOffice/Pages/Commission/UserPayouts.razor
@@ -49,6 +49,21 @@
StartIcon="@Icons.Material.Filled.Search">
جستجو
+
+ @if (_isCreditingWallets)
+ {
+
+ در حال واریز...
+ }
+ else
+ {
+ واریز به کیف پول
+ }
+
diff --git a/src/BackOffice/Pages/Commission/UserPayouts.razor.cs b/src/BackOffice/Pages/Commission/UserPayouts.razor.cs
index 5ea0975..a125b41 100644
--- a/src/BackOffice/Pages/Commission/UserPayouts.razor.cs
+++ b/src/BackOffice/Pages/Commission/UserPayouts.razor.cs
@@ -18,6 +18,7 @@ public partial class UserPayouts
private long? _filterWeekDefinitionId;
private int? _filterStatus;
private long? _filterPackageId;
+ private bool _isCreditingWallets;
private async Task> ServerReload(GridState state)
{
@@ -147,6 +148,50 @@ public partial class UserPayouts
}
}
+ private async Task BulkCreditWallets()
+ {
+ if (!_filterWeekDefinitionId.HasValue)
+ {
+ Snackbar.Add("لطفاً ابتدا یک هفته انتخاب کنید", Severity.Warning);
+ return;
+ }
+
+ var confirmed = await DialogService.ShowMessageBox(
+ "واریز دستهجمعی به کیف پول",
+ $"آیا از واریز کمیسیون همه پرداختهای «در انتظار» هفته انتخابشده به کیف پول کاربران مطمئن هستید؟ این عملیات برگشتپذیر نیست.",
+ yesText: "بله، واریز کن", cancelText: "لغو");
+
+ if (confirmed != true)
+ return;
+
+ _isCreditingWallets = true;
+ StateHasChanged();
+
+ try
+ {
+ var result = await CommissionContract.BulkCreditPayoutsAsync(new BulkCreditPayoutsRequest
+ {
+ WeekDefinitionId = _filterWeekDefinitionId.Value
+ });
+
+ if (result.CreditedCount == 0)
+ Snackbar.Add("هیچ پرداخت در انتظاری برای این هفته یافت نشد", Severity.Info);
+ else
+ Snackbar.Add(result.Message, Severity.Success);
+
+ await ApplyFilter();
+ }
+ catch (Exception ex)
+ {
+ Snackbar.Add($"خطا در واریز: {ex.Message}", Severity.Error);
+ }
+ finally
+ {
+ _isCreditingWallets = false;
+ StateHasChanged();
+ }
+ }
+
private async Task RejectWithdrawal(UserCommissionPayoutModel payout)
{
var reason = await DialogService.ShowMessageBox(