174 lines
5.7 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|