feat: add withdrawal requests feature and update VAT loading mechanism
Build and Deploy / build (push) Successful in 1m25s

This commit is contained in:
masoodafar-web
2025-12-20 04:03:11 +03:30
parent 9ee464b8b4
commit 025e8d3c3e
24 changed files with 961 additions and 398 deletions
@@ -1,4 +1,5 @@
using FrontOffice.Main.Utilities;
using FrontOffice.Main.Shared;
using Microsoft.AspNetCore.Components;
using MudBlazor;
@@ -7,13 +8,15 @@ namespace FrontOffice.Main.Pages.Commission;
public partial class WeeklyBalancePage : ComponentBase
{
[Inject] private CommissionService CommissionService { get; set; } = default!;
[Inject] private ISnackbar SnackbarService { get; set; } = default!;
[Parameter]
[SupplyParameterFromQuery(Name = "week")]
public int? QueryWeekNumber { get; set; }
public string? QueryWeekNumber { get; set; }
private WeekSelector? _weekSelector;
private WeekDefinitionDto? _selectedWeekDefinition;
private WeeklyBalanceDto? _weeklyBalance;
private int? _selectedWeekNumber;
private bool _isLoading = true;
private bool _hasError = false;
@@ -27,12 +30,44 @@ public partial class WeeklyBalancePage : ComponentBase
}
};
protected override async Task OnInitializedAsync()
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (QueryWeekNumber.HasValue)
_selectedWeekNumber = QueryWeekNumber;
if (firstRender)
{
// Wait for WeekSelector to initialize and load its cached weeks
if (_weekSelector != null)
{
await _weekSelector.EnsureLoadedAsync();
// Handle query parameter ?week=46 (WeekOrder) or ?week=123 (Id)
if (!string.IsNullOrEmpty(QueryWeekNumber))
{
// Try to parse as integer (first try as WeekOrder, then as Id)
if (int.TryParse(QueryWeekNumber, out int weekOrder))
{
_selectedWeekDefinition = _weekSelector.FindByWeekOrder(weekOrder);
if (_selectedWeekDefinition == null && long.TryParse(QueryWeekNumber, out long id))
{
_selectedWeekDefinition = _weekSelector.FindById(id);
}
}
}
// If no week selected and no query param, select current week
if (_selectedWeekDefinition == null)
{
_selectedWeekDefinition = _weekSelector.GetCurrentWeek();
}
StateHasChanged();
await LoadWeeklyBalanceAsync();
}
}
}
await LoadWeeklyBalanceAsync();
protected override void OnInitialized()
{
_isLoading = true;
}
private async Task LoadWeeklyBalanceAsync()
@@ -41,12 +76,27 @@ public partial class WeeklyBalancePage : ComponentBase
{
_isLoading = true;
_hasError = false;
_weeklyBalance = await CommissionService.GetMyWeeklyBalanceAsync(_selectedWeekNumber);
long? weekDefinitionId = _selectedWeekDefinition?.Id;
_weeklyBalance = await CommissionService.GetMyWeeklyBalanceAsync(weekDefinitionId);
// Update week display name from selected definition if available
if (_selectedWeekDefinition != null && _weeklyBalance != null)
{
_weeklyBalance.WeekDisplayName = _selectedWeekDefinition.DisplayName;
return;
}
_weeklyBalance = new WeeklyBalanceDto()
{
};
}
catch (Exception ex)
{
_hasError = true;
Snackbar.Add($"خطا در دریافت تعادل: {ex.Message}", Severity.Error);
SnackbarService.Add($"خطا در دریافت تعادل: {ex.Message}", Severity.Error);
}
finally
{
@@ -56,7 +106,11 @@ public partial class WeeklyBalancePage : ComponentBase
private async Task LoadCurrentWeekAsync()
{
_selectedWeekNumber = null;
if (_weekSelector != null)
{
await _weekSelector.SelectCurrentWeekAsync();
}
_selectedWeekDefinition = _weekSelector?.GetCurrentWeek();
await LoadWeeklyBalanceAsync();
}