feat: update commission status handling and UI; enhance status representation with computed properties and improve filtering logic
Build and Deploy / build (push) Successful in 2m20s
Build and Deploy / build (push) Successful in 2m20s
This commit is contained in:
@@ -12,7 +12,7 @@
|
|||||||
<PackageReference Include="DateTimeConverterCL" Version="1.0.0" />
|
<PackageReference Include="DateTimeConverterCL" Version="1.0.0" />
|
||||||
<PackageReference Include="Foursat.FrontOffice.BFF.City.Protobuf" Version="0.0.2" />
|
<PackageReference Include="Foursat.FrontOffice.BFF.City.Protobuf" Version="0.0.2" />
|
||||||
<PackageReference Include="Foursat.FrontOffice.BFF.ClubMembership.Protobuf" Version="0.0.4" />
|
<PackageReference Include="Foursat.FrontOffice.BFF.ClubMembership.Protobuf" Version="0.0.4" />
|
||||||
<PackageReference Include="Foursat.FrontOffice.BFF.Commission.Protobuf" Version="0.0.3" />
|
<PackageReference Include="Foursat.FrontOffice.BFF.Commission.Protobuf" Version="0.0.4" />
|
||||||
<PackageReference Include="Foursat.FrontOffice.BFF.Configuration.Protobuf" Version="0.0.4" />
|
<PackageReference Include="Foursat.FrontOffice.BFF.Configuration.Protobuf" Version="0.0.4" />
|
||||||
<!-- <PackageReference Include="Foursat.FrontOffice.BFF.ClubMembership.Protobuf" Version="0.0.3" /> -->
|
<!-- <PackageReference Include="Foursat.FrontOffice.BFF.ClubMembership.Protobuf" Version="0.0.3" /> -->
|
||||||
<!-- <PackageReference Include="Foursat.FrontOffice.BFF.Commission.Protobuf" Version="0.0.2" /> -->
|
<!-- <PackageReference Include="Foursat.FrontOffice.BFF.Commission.Protobuf" Version="0.0.2" /> -->
|
||||||
|
|||||||
@@ -28,10 +28,11 @@
|
|||||||
Style="max-width: 150px;" />
|
Style="max-width: 150px;" />
|
||||||
<MudSelect T="string" @bind-Value="_filterStatus" Label="وضعیت" Variant="Variant.Outlined" Style="max-width: 200px;">
|
<MudSelect T="string" @bind-Value="_filterStatus" Label="وضعیت" Variant="Variant.Outlined" Style="max-width: 200px;">
|
||||||
<MudSelectItem T="string" Value="@string.Empty">همه</MudSelectItem>
|
<MudSelectItem T="string" Value="@string.Empty">همه</MudSelectItem>
|
||||||
<MudSelectItem T="string" Value="@("Created")">ایجاد شده</MudSelectItem>
|
<MudSelectItem T="string" Value="@("Pending")">در انتظار</MudSelectItem>
|
||||||
<MudSelectItem T="string" Value="@("Paid")">پرداخت شده</MudSelectItem>
|
<MudSelectItem T="string" Value="@("Paid")">پرداخت شده</MudSelectItem>
|
||||||
<MudSelectItem T="string" Value="@("WithdrawalRequested")">درخواست برداشت</MudSelectItem>
|
<MudSelectItem T="string" Value="@("WithdrawalRequested")">درخواست برداشت</MudSelectItem>
|
||||||
<MudSelectItem T="string" Value="@("Withdrawn")">برداشت شده</MudSelectItem>
|
<MudSelectItem T="string" Value="@("Withdrawn")">برداشت شده</MudSelectItem>
|
||||||
|
<MudSelectItem T="string" Value="@("PaymentFailed")">شکست خورده</MudSelectItem>
|
||||||
<MudSelectItem T="string" Value="@("Cancelled")">لغو شده</MudSelectItem>
|
<MudSelectItem T="string" Value="@("Cancelled")">لغو شده</MudSelectItem>
|
||||||
</MudSelect>
|
</MudSelect>
|
||||||
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="ApplyFiltersAsync" StartIcon="@Icons.Material.Filled.FilterList">
|
<MudButton Variant="Variant.Filled" Color="Color.Primary" OnClick="ApplyFiltersAsync" StartIcon="@Icons.Material.Filled.FilterList">
|
||||||
@@ -65,8 +66,8 @@
|
|||||||
<MudText Color="Color.Success"><strong>@context.AmountFormatted</strong></MudText>
|
<MudText Color="Color.Success"><strong>@context.AmountFormatted</strong></MudText>
|
||||||
</MudTd>
|
</MudTd>
|
||||||
<MudTd>
|
<MudTd>
|
||||||
<MudChip T="string" Color="@GetStatusColor(context.StatusBadgeColor)" Size="Size.Small" Variant="Variant.Outlined">
|
<MudChip T="string" Color="@GetStatusColor(context.StatusColor)" Size="Size.Small" Variant="Variant.Outlined">
|
||||||
@context.Status
|
@context.StatusText
|
||||||
</MudChip>
|
</MudChip>
|
||||||
</MudTd>
|
</MudTd>
|
||||||
<MudTd>@context.DatePersian</MudTd>
|
<MudTd>@context.DatePersian</MudTd>
|
||||||
@@ -91,8 +92,8 @@
|
|||||||
<MudStack Spacing="1">
|
<MudStack Spacing="1">
|
||||||
<MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
|
<MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center">
|
||||||
<MudChip T="string" Color="Color.Default" Size="Size.Small">@payout.WeekDisplayName</MudChip>
|
<MudChip T="string" Color="Color.Default" Size="Size.Small">@payout.WeekDisplayName</MudChip>
|
||||||
<MudChip T="string" Color="@GetStatusColor(payout.StatusBadgeColor)" Size="Size.Small" Variant="Variant.Outlined">
|
<MudChip T="string" Color="@GetStatusColor(payout.StatusColor)" Size="Size.Small" Variant="Variant.Outlined">
|
||||||
@payout.Status
|
@payout.StatusText
|
||||||
</MudChip>
|
</MudChip>
|
||||||
</MudStack>
|
</MudStack>
|
||||||
<MudText Typo="Typo.h6" Color="Color.Success">@payout.AmountFormatted</MudText>
|
<MudText Typo="Typo.h6" Color="Color.Success">@payout.AmountFormatted</MudText>
|
||||||
|
|||||||
@@ -61,8 +61,8 @@
|
|||||||
<MudText Color="Color.Success" Typo="Typo.body1"><strong>@context.AmountFormatted</strong></MudText>
|
<MudText Color="Color.Success" Typo="Typo.body1"><strong>@context.AmountFormatted</strong></MudText>
|
||||||
</MudTd>
|
</MudTd>
|
||||||
<MudTd DataLabel="وضعیت">
|
<MudTd DataLabel="وضعیت">
|
||||||
<MudChip T="string" Color="@GetStatusColor(context.StatusBadgeColor)" Size="Size.Small">
|
<MudChip T="string" Color="@GetStatusColor(context.StatusColor)" Size="Size.Small">
|
||||||
@context.Status
|
@context.StatusText
|
||||||
</MudChip>
|
</MudChip>
|
||||||
</MudTd>
|
</MudTd>
|
||||||
<MudTd DataLabel="تاریخ">
|
<MudTd DataLabel="تاریخ">
|
||||||
|
|||||||
@@ -39,16 +39,18 @@ public partial class WeeklyBalancePage : ComponentBase
|
|||||||
{
|
{
|
||||||
await _weekSelector.EnsureLoadedAsync();
|
await _weekSelector.EnsureLoadedAsync();
|
||||||
|
|
||||||
// Handle query parameter ?week=46 (WeekOrder) or ?week=123 (Id)
|
// Handle query parameter ?week=2 (WeekDefinitionId)
|
||||||
if (!string.IsNullOrEmpty(QueryWeekNumber))
|
if (!string.IsNullOrEmpty(QueryWeekNumber))
|
||||||
{
|
{
|
||||||
// Try to parse as integer (first try as WeekOrder, then as Id)
|
// Try to parse as WeekDefinitionId first (most common from dashboard links)
|
||||||
if (int.TryParse(QueryWeekNumber, out int weekOrder))
|
if (long.TryParse(QueryWeekNumber, out long id))
|
||||||
{
|
|
||||||
_selectedWeekDefinition = _weekSelector.FindByWeekOrder(weekOrder);
|
|
||||||
if (_selectedWeekDefinition == null && long.TryParse(QueryWeekNumber, out long id))
|
|
||||||
{
|
{
|
||||||
_selectedWeekDefinition = _weekSelector.FindById(id);
|
_selectedWeekDefinition = _weekSelector.FindById(id);
|
||||||
|
|
||||||
|
// Fallback: try as WeekOrder if not found by Id
|
||||||
|
if (_selectedWeekDefinition == null && int.TryParse(QueryWeekNumber, out int weekOrder))
|
||||||
|
{
|
||||||
|
_selectedWeekDefinition = _weekSelector.FindByWeekOrder(weekOrder);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,9 +13,31 @@ public class CommissionPayoutDto
|
|||||||
public int BalancesEarned { get; set; }
|
public int BalancesEarned { get; set; }
|
||||||
public long TotalAmount { get; set; }
|
public long TotalAmount { get; set; }
|
||||||
public string AmountFormatted { get; set; } = string.Empty;
|
public string AmountFormatted { get; set; } = string.Empty;
|
||||||
public string Status { get; set; } = string.Empty;
|
public int Status { get; set; }
|
||||||
public string StatusBadgeColor { get; set; } = string.Empty;
|
|
||||||
public string DatePersian { get; set; } = string.Empty;
|
public string DatePersian { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
// Computed properties for UI
|
||||||
|
public string StatusText => Status switch
|
||||||
|
{
|
||||||
|
0 => "در انتظار",
|
||||||
|
1 => "پرداخت شده",
|
||||||
|
2 => "درخواست برداشت",
|
||||||
|
3 => "برداشت شده",
|
||||||
|
4 => "شکست خورده",
|
||||||
|
5 => "لغو شده",
|
||||||
|
_ => "نامشخص"
|
||||||
|
};
|
||||||
|
|
||||||
|
public string StatusColor => Status switch
|
||||||
|
{
|
||||||
|
0 => "warning",
|
||||||
|
1 => "success",
|
||||||
|
2 => "info",
|
||||||
|
3 => "success",
|
||||||
|
4 => "error",
|
||||||
|
5 => "default",
|
||||||
|
_ => "default"
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -98,10 +98,12 @@ public class CommissionService
|
|||||||
{
|
{
|
||||||
request.Status = status switch
|
request.Status = status switch
|
||||||
{
|
{
|
||||||
"Pending" or "ایجاد شده" => 0,
|
"Pending" or "در انتظار" or "Created" or "ایجاد شده" => 0,
|
||||||
"Calculated" or "محاسبه شده" => 1,
|
"Paid" or "پرداخت شده" => 1,
|
||||||
"Paid" or "پرداخت شده" => 2,
|
"WithdrawalRequested" or "درخواست برداشت" => 2,
|
||||||
"Withdrawn" or "برداشت شده" => 3,
|
"Withdrawn" or "برداشت شده" => 3,
|
||||||
|
"PaymentFailed" or "شکست خورده" => 4,
|
||||||
|
"Cancelled" or "لغو شده" => 5,
|
||||||
_ => null
|
_ => null
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -119,7 +121,6 @@ public class CommissionService
|
|||||||
TotalAmount = p.TotalAmount,
|
TotalAmount = p.TotalAmount,
|
||||||
AmountFormatted = p.AmountFormatted,
|
AmountFormatted = p.AmountFormatted,
|
||||||
Status = p.Status,
|
Status = p.Status,
|
||||||
StatusBadgeColor = p.StatusBadgeColor,
|
|
||||||
DatePersian = p.DatePersian
|
DatePersian = p.DatePersian
|
||||||
}).ToList(),
|
}).ToList(),
|
||||||
TotalCount = (int)(response.MetaData?.TotalCount ?? 0),
|
TotalCount = (int)(response.MetaData?.TotalCount ?? 0),
|
||||||
@@ -209,9 +210,9 @@ public class CommissionService
|
|||||||
|
|
||||||
var response = await _client.GetMyCommissionPayoutsAsync(request);
|
var response = await _client.GetMyCommissionPayoutsAsync(request);
|
||||||
|
|
||||||
// Filter: exclude already withdrawn (status text contains "برداشت" or status=3)
|
// Filter: exclude already withdrawn (status=3) and withdrawal requested (status=2)
|
||||||
return response.Payouts
|
return response.Payouts
|
||||||
.Where(p => !p.Status.Contains("برداشت") && p.Status != "Withdrawn")
|
.Where(p => p.Status != 2 && p.Status != 3)
|
||||||
.Select(p => new CommissionPayoutDto
|
.Select(p => new CommissionPayoutDto
|
||||||
{
|
{
|
||||||
Id = p.Id,
|
Id = p.Id,
|
||||||
@@ -221,7 +222,6 @@ public class CommissionService
|
|||||||
TotalAmount = p.TotalAmount,
|
TotalAmount = p.TotalAmount,
|
||||||
AmountFormatted = p.AmountFormatted,
|
AmountFormatted = p.AmountFormatted,
|
||||||
Status = p.Status,
|
Status = p.Status,
|
||||||
StatusBadgeColor = p.StatusBadgeColor,
|
|
||||||
DatePersian = p.DatePersian
|
DatePersian = p.DatePersian
|
||||||
}).ToList();
|
}).ToList();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user