Files
BackOffice/src/BackOffice/Pages/Commission/UserPayouts.razor.cs
T
masoodafar-web 1a65babb9d
Build and Deploy / build (push) Successful in 2m8s
feat(UserPayouts): update status options and colors for user payouts
2025-12-27 07:34:38 +03:30

174 lines
5.7 KiB
C#

using BackOffice.BFF.Protobuf.Common;
using Foursat.BackOffice.BFF.Commission.Protos;
using Microsoft.AspNetCore.Components;
using MudBlazor;
using Google.Protobuf.WellKnownTypes;
using BackOffice.Pages.Commission.Components;
using BackOffice.Services;
namespace BackOffice.Pages.Commission;
public partial class UserPayouts
{
[Inject] public CommissionContract.CommissionContractClient CommissionContract { get; set; }
[Inject] public IPersianDateTimeService PersianDateTime { get; set; }
private MudDataGrid<UserCommissionPayoutModel> _gridData;
private long? _filterUserId;
private long? _filterWeekDefinitionId;
private int? _filterStatus;
private async Task<GridData<UserCommissionPayoutModel>> ServerReload(GridState<UserCommissionPayoutModel> state)
{
try
{
var request = new GetUserCommissionPayoutsRequest
{
PaginationState = new PaginationState()
{
PageNumber = state.Page + 1,
PageSize = state.PageSize
},
Filter = new GetUserPayoutsFilter()
};
if (_filterUserId.HasValue && _filterUserId.Value > 0)
{
request.Filter.UserId = _filterUserId.Value;
}
if (_filterWeekDefinitionId.HasValue && _filterWeekDefinitionId.Value > 0)
{
request.Filter.WeekDefinitionId = _filterWeekDefinitionId.Value;
}
if (_filterStatus.HasValue)
{
request.Filter.Status = _filterStatus.Value;
}
var result = await CommissionContract.GetUserCommissionPayoutsAsync(request);
if (result?.Models != null && result.Models.Any())
{
return new GridData<UserCommissionPayoutModel>
{
Items = result.Models.ToList(),
TotalItems = (int)result.MetaData.TotalCount
};
}
return new GridData<UserCommissionPayoutModel>();
}
catch (Exception ex)
{
Snackbar.Add($"خطا در بارگذاری داده‌ها: {ex.Message}", Severity.Error);
return new GridData<UserCommissionPayoutModel>();
}
}
private async Task ApplyFilter()
{
if (_gridData != null)
{
await _gridData.ReloadServerData();
}
}
private Color GetStatusColor(int status)
{
return status switch
{
0 => Color.Warning, // Pending - در انتظار
1 => Color.Success, // Paid - پرداخت شده
2 => Color.Info, // WithdrawRequested - درخواست برداشت
3 => Color.Primary, // Withdrawn - برداشت شده
4 => Color.Error, // PaymentFailed - شکست خورده
5 => Color.Dark, // Cancelled - لغو شده
_ => Color.Default
};
}
private string GetStatusText(int status)
{
return status switch
{
0 => "در انتظار",
1 => "پرداخت شده",
2 => "درخواست برداشت",
3 => "برداشت شده",
4 => "شکست خورده",
5 => "لغو شده",
_ => "نامشخص"
};
}
private async Task ViewDetails(UserCommissionPayoutModel payout)
{
var parameters = new DialogParameters
{
["Payout"] = payout
};
await DialogService.ShowAsync<PayoutDetailsDialog>("جزئیات Payout", parameters, new DialogOptions
{
CloseButton = true,
MaxWidth = MaxWidth.Medium,
FullWidth = true
});
}
private async Task ApproveWithdrawal(UserCommissionPayoutModel payout)
{
var confirmed = await DialogService.ShowMessageBox(
"تایید برداشت",
$"آیا از تایید برداشت برای کاربر {payout.UserName} (مبلغ: {payout.TotalAmount:N0} ریال) مطمئن هستید؟",
yesText: "تایید", cancelText: "لغو");
if (confirmed == true)
{
try
{
await CommissionContract.ProcessWithdrawalAsync(new ProcessWithdrawalRequest
{
PayoutId = payout.Id,
IsApproved = true
});
Snackbar.Add("درخواست برداشت با موفقیت تایید شد", Severity.Success);
await ApplyFilter();
}
catch (Exception ex)
{
Snackbar.Add($"خطا در تایید: {ex.Message}", Severity.Error);
}
}
}
private async Task RejectWithdrawal(UserCommissionPayoutModel payout)
{
var reason = await DialogService.ShowMessageBox(
"رد برداشت",
$"آیا از رد برداشت برای کاربر {payout.UserName} مطمئن هستید؟",
yesText: "رد کردن", cancelText: "لغو");
if (reason == true)
{
try
{
await CommissionContract.ProcessWithdrawalAsync(new ProcessWithdrawalRequest
{
PayoutId = payout.Id,
IsApproved = false,
Reason = "رد شده توسط ادمین"
});
Snackbar.Add("درخواست برداشت رد شد", Severity.Warning);
await ApplyFilter();
}
catch (Exception ex)
{
Snackbar.Add($"خطا در رد: {ex.Message}", Severity.Error);
}
}
}
}