diff --git a/src/FrontOffice.Main/ConfigureServices.cs b/src/FrontOffice.Main/ConfigureServices.cs index 8c01087..b0b8611 100644 --- a/src/FrontOffice.Main/ConfigureServices.cs +++ b/src/FrontOffice.Main/ConfigureServices.cs @@ -16,10 +16,10 @@ using FrontOffice.BFF.ShopingCart.Protobuf.Protos.ShopingCart; // New Proto imports using FrontOffice.BFF.ClubMembership.Protobuf.Protos.ClubMembership; using FrontOffice.BFF.Commission.Protobuf.Protos.Commission; -using FrontOffice.BFF.Configuration.Protobuf.Protos.Configuration; using FrontOffice.BFF.NetworkMembership.Protobuf.Protos.NetworkMembership; using FrontOffice.BFF.DiscountShop.Protobuf.Protos.DiscountShop; using FrontOffice.BFF.City.Protobuf; +using FrontOffice.BFF.Configuration.Protobuf.Protos.Configuration; using FrontOffice.Main.Utilities; namespace Microsoft.Extensions.DependencyInjection; @@ -53,7 +53,7 @@ public static class ConfigureServices services.AddScoped(); services.AddScoped(); services.AddScoped(); - services.AddSingleton(); // Singleton برای cache روزانه + services.AddScoped(); // Singleton برای cache روزانه // Package service services.AddScoped(); // New services for Club, Network, Commission diff --git a/src/FrontOffice.Main/FrontOffice.Main.csproj b/src/FrontOffice.Main/FrontOffice.Main.csproj index 3a9c916..d26a51a 100644 --- a/src/FrontOffice.Main/FrontOffice.Main.csproj +++ b/src/FrontOffice.Main/FrontOffice.Main.csproj @@ -10,20 +10,29 @@ + + + + - - + + + + - - - + + + + - + - - - + + + + + @@ -36,15 +45,17 @@ - - - - - - - - - + + + + + + + + + + + diff --git a/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor b/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor index f7fd2fe..45721c3 100644 --- a/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor +++ b/src/FrontOffice.Main/Pages/Commission/CommissionDashboardPage.razor @@ -58,7 +58,7 @@ - @context.WeekLabel + @context.WeekDisplayName @context.BalancesEarned @@ -75,7 +75,7 @@ Variant="Variant.Text" Color="Color.Info" StartIcon="@Icons.Material.Filled.Info" - Href="@($"{RouteConstants.Commission.WeeklyBalance}?week={context.WeekNumber}")"> + Href="@($"{RouteConstants.Commission.WeeklyBalance}?week={context.WeekDefinitionId}")"> جزئیات @@ -90,7 +90,7 @@ - @payout.WeekLabel + @payout.WeekDisplayName @payout.Status @@ -103,7 +103,7 @@ Color="Color.Info" FullWidth="true" StartIcon="@Icons.Material.Filled.Info" - Href="@($"{RouteConstants.Commission.WeeklyBalance}?week={payout.WeekNumber}")"> + Href="@($"{RouteConstants.Commission.WeeklyBalance}?week={payout.WeekDefinitionId}")"> مشاهده جزئیات هفته diff --git a/src/FrontOffice.Main/Pages/Commission/CommissionHistoryPage.razor b/src/FrontOffice.Main/Pages/Commission/CommissionHistoryPage.razor index e1fd2c3..ad0967c 100644 --- a/src/FrontOffice.Main/Pages/Commission/CommissionHistoryPage.razor +++ b/src/FrontOffice.Main/Pages/Commission/CommissionHistoryPage.razor @@ -52,7 +52,7 @@ - @context.WeekLabel + @context.WeekDisplayName @context.BalancesEarned @@ -73,7 +73,7 @@ Variant="Variant.Text" Color="Color.Info" StartIcon="@Icons.Material.Filled.Visibility" - Href="@($"{RouteConstants.Commission.WeeklyBalance}?week={context.WeekNumber}")"> + Href="@($"{RouteConstants.Commission.WeeklyBalance}?week={context.WeekDefinitionId}")"> مشاهده diff --git a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor index ea62a47..a279d1b 100644 --- a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor +++ b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor @@ -1,5 +1,6 @@ @attribute [Route(RouteConstants.Commission.WeeklyBalance)] @using FrontOffice.Main.Utilities +@using FrontOffice.Main.Shared @using MudBlazor تعادل هفتگی @@ -13,20 +14,38 @@ - - - - مشاهده - - - هفته جاری - - + + + + + @* *@ + @* *@ + @* هفته جاری *@ + @* *@ + @* *@ + + + جستجو + + + + @if (_isLoading) @@ -35,113 +54,89 @@ } else if (_weeklyBalance is not null) { - - - - هفته @_weeklyBalance.WeekNumber - @_weeklyBalance.WeekLabel - - - - تاریخ شروع: - @_weeklyBalance.StartDatePersian - - - تاریخ پایان: - @_weeklyBalance.EndDatePersian - - - + + + + + + + @_weeklyBalance.WeekDisplayName + + + + شروع: @_weeklyBalance.StartDatePersian + + + پایان: @_weeklyBalance.EndDatePersian + + - + - - - - - - شاخه چپ - - @_weeklyBalance.LeftBalanceFormatted + + + + + شاخه چپ + @_weeklyBalance.LeftBalanceFormatted + Size="Size.Medium" + Class="rounded-lg mt-2" + Style="width: 100%;" /> - @GetLeftPercentage().ToString("F1")% از کل تعادل + @GetLeftPercentage().ToString("F1")% از کل - - - - - - شاخه راست - - @_weeklyBalance.RightBalanceFormatted + + + + + شاخه راست + @_weeklyBalance.RightBalanceFormatted + Size="Size.Medium" + Class="rounded-lg mt-2" + Style="width: 100%;" /> - @GetRightPercentage().ToString("F1")% از کل تعادل + @GetRightPercentage().ToString("F1")% از کل - + - محاسبات کمیسیون - - - تعادل چپ: - @_weeklyBalance.LeftBalanceFormatted - - - تعادل راست: - @_weeklyBalance.RightBalanceFormatted - - - - حداقل تعادل (پایه کمیسیون): - @_weeklyBalance.MinBalanceFormatted - - - تعداد تعادل (دفعات): - @_weeklyBalance.BalanceCount - - - - کمیسیون محاسبه شده: - @_weeklyBalance.CalculatedCommissionFormatted - + محاسبات کمیسیون + + + + حداقل تعادل (پایه کمیسیون): + @_weeklyBalance.MinBalanceFormatted + + + تعداد تعادل (دفعات): + @_weeklyBalance.BalanceCount + + + کمیسیون محاسبه شده: + @_weeklyBalance.CalculatedCommissionFormatted + + + - @if (_weeklyBalance.LeftCarryover > 0 || _weeklyBalance.RightCarryover > 0) - { - - - Carryover (انتقال به هفته بعد):
- چپ: @_weeklyBalance.LeftCarryoverFormatted | راست: @_weeklyBalance.RightCarryoverFormatted -
-
- } -
-
- - - - نمودار مقایسه - + @if (_weeklyBalance.LeftCarryover > 0 || _weeklyBalance.RightCarryover > 0) + { + + انتقال به هفته بعد: چپ: @_weeklyBalance.LeftCarryoverFormatted | راست: @_weeklyBalance.RightCarryoverFormatted + + } } else if (_hasError) diff --git a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs index 998d616..5cd3e30 100644 --- a/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs +++ b/src/FrontOffice.Main/Pages/Commission/WeeklyBalancePage.razor.cs @@ -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(); } diff --git a/src/FrontOffice.Main/Pages/Profile/Index.razor b/src/FrontOffice.Main/Pages/Profile/Index.razor index 16783bc..f72db0d 100644 --- a/src/FrontOffice.Main/Pages/Profile/Index.razor +++ b/src/FrontOffice.Main/Pages/Profile/Index.razor @@ -192,6 +192,17 @@ + + + + + + درخواست برداشت + ثبت و پیگیری برداشت + + + + diff --git a/src/FrontOffice.Main/Pages/Profile/Wallet.razor b/src/FrontOffice.Main/Pages/Profile/Wallet.razor index 2f9a9bd..2e098cb 100644 --- a/src/FrontOffice.Main/Pages/Profile/Wallet.razor +++ b/src/FrontOffice.Main/Pages/Profile/Wallet.razor @@ -17,14 +17,9 @@
- - - - - موجودی تخفیف باشگاه - @_balances.Discount - - + + موجودی فروشگاه تخفیفی + @_balances.Discount @@ -35,61 +30,45 @@ - - درخواست برداشت از موجودی شبکه - - - - - - - - - حداقل مبلغ برداشت: @FormatPrice(_minWithdrawalAmount) - - - @(_isSubmittingWithdrawal ? "در حال ثبت..." : "ثبت درخواست برداشت") - - - + + + درخواست‌های برداشت + تراکنش‌ها و مسیرهای شارژ - - - - همه - ورودی (شارژ) - خروجی (برداشت/خرید) - - - همه - Pending - Requested - Withdrawn - Cancelled - - اعمال فیلتر - + + + + + + + همه + ورودی (شارژ) + خروجی (برداشت/خرید) + + + + + اعمال فیلتر + + + @@ -126,49 +105,5 @@
- - - درخواست‌های برداشت ثبت‌شده - - - - هفته - مبلغ - وضعیت - روش - تاریخ - - - @context.WeekNumber - @FormatPrice(context.Amount) - - - @ResolveStatusText(context.Status) - - - @ResolveMethodText(context.Method) - @context.Created - - - - - - - @foreach (var wd in _withdrawals) - { - - - - @wd.WeekNumber - @FormatPrice(wd.Amount) - - وضعیت: @ResolveStatusText(wd.Status) | روش: @ResolveMethodText(wd.Method) - @wd.Created - - - } - - - diff --git a/src/FrontOffice.Main/Pages/Profile/Wallet.razor.cs b/src/FrontOffice.Main/Pages/Profile/Wallet.razor.cs index d402af9..68cb769 100644 --- a/src/FrontOffice.Main/Pages/Profile/Wallet.razor.cs +++ b/src/FrontOffice.Main/Pages/Profile/Wallet.razor.cs @@ -6,71 +6,20 @@ namespace FrontOffice.Main.Pages.Profile; public partial class Wallet : ComponentBase { - private long _minWithdrawalAmount = 1_000_000; // مقدار پیش‌فرض، از CMS خوانده می‌شود private (string Credit, string Discount, string Network) _balances = ("-", "-", "-"); private List _txs = new(); - private List _withdrawals = new(); private string? _filterReferenceId; private string _filterType = "all"; - private string _withdrawStatusFilter = "all"; - private bool _isSubmittingWithdrawal; - private long _withdrawPayoutId; - private WithdrawalMethodClient _withdrawMethod = WithdrawalMethodClient.Cash; - private string? _withdrawIban; protected override async Task OnInitializedAsync() { var b = await WalletService.GetBalancesAsync(); _balances = (FormatPrice(b.CreditBalance), FormatPrice(b.DiscountBalance), FormatPrice(b.NetworkBalance)); _txs = await WalletService.GetTransactionsAsync(); - _withdrawals = await WalletService.GetWithdrawalsAsync(); - var settings = await WalletService.GetWithdrawalSettingsAsync(); - if (settings.MinWithdrawalAmount > 0) - _minWithdrawalAmount = settings.MinWithdrawalAmount; } private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price); - private async Task SubmitWithdrawal() - { - var target = _withdrawals.FirstOrDefault(x => x.Id == _withdrawPayoutId); - if (target is null) - { - _withdrawals = await WalletService.GetWithdrawalsAsync(); - target = _withdrawals.FirstOrDefault(x => x.Id == _withdrawPayoutId); - } - if (target != null && target.Amount < _minWithdrawalAmount) - { - Snackbar.Add($"مبلغ این واریز کمتر از حداقل برداشت ({_minWithdrawalAmount:N0} تومان) است.", Severity.Warning); - return; - } - if (_withdrawPayoutId <= 0) - { - Snackbar.Add("شناسه واریز (PayoutId) الزامی است.", Severity.Warning); - return; - } - if (_withdrawMethod == WithdrawalMethodClient.Cash && string.IsNullOrWhiteSpace(_withdrawIban)) - { - Snackbar.Add("برای برداشت نقدی، شماره شبا لازم است.", Severity.Warning); - return; - } - - try - { - _isSubmittingWithdrawal = true; - await WalletService.RequestWithdrawalAsync(_withdrawPayoutId, _withdrawMethod, _withdrawIban); - Snackbar.Add("درخواست برداشت ثبت شد.", Severity.Success); - } - catch (Exception ex) - { - Snackbar.Add($"خطا در ثبت برداشت: {ex.Message}", Severity.Error); - } - finally - { - _isSubmittingWithdrawal = false; - } - } - private async Task ApplyFilters() { long? refId = null; @@ -85,39 +34,5 @@ public partial class Wallet : ComponentBase _ => null }; _txs = await WalletService.GetTransactionsAsync(refId, isIncrease); - int? status = _withdrawStatusFilter switch - { - "pending" => 1, - "requested" => 2, - "withdrawn" => 3, - "cancelled" => 4, - _ => null - }; - _withdrawals = await WalletService.GetWithdrawalsAsync(status); } - - private static string ResolveStatusText(int status) => status switch - { - 0 => "ایجاد شده", - 1 => "پرداخت شده", - 2 => "درخواست برداشت", - 3 => "برداشت شده", - 4 => "لغو شده", - _ => status.ToString() - }; - - private static Color ResolveStatusColor(int status) => status switch - { - 2 => Color.Warning, - 3 => Color.Success, - 4 => Color.Error, - _ => Color.Info - }; - - private static string ResolveMethodText(int? method) => method switch - { - 0 => "نقدی", - 1 => "الماس", - _ => "-" - }; } diff --git a/src/FrontOffice.Main/Pages/Profile/WithdrawalRequests.razor b/src/FrontOffice.Main/Pages/Profile/WithdrawalRequests.razor new file mode 100644 index 0000000..96da6a3 --- /dev/null +++ b/src/FrontOffice.Main/Pages/Profile/WithdrawalRequests.razor @@ -0,0 +1,125 @@ +@attribute [Route(RouteConstants.Profile.WithdrawalRequests)] + +درخواست‌های برداشت + + + + + درخواست‌های برداشت + بازگشت به کیف پول + + + + + ثبت درخواست برداشت جدید + + + + برداشت نقدی (نیاز به شبا) + الماس/غیرنقدی + + + + حداقل مبلغ برداشت: @FormatPrice(_minWithdrawalAmount) + + + @(_isSubmittingWithdrawal ? "در حال ثبت..." : "ثبت درخواست برداشت") + + + + + + + + + همه + در انتظار + درخواست شده + برداشت شده + لغو شده + + اعمال فیلتر + + + + + + لیست درخواست‌ها + + @if (_isLoading) + { + + } + else if (!_withdrawals.Any()) + { + + هنوز درخواست برداشتی ثبت نشده است. + + } + else + { + + + + + هفته + مبلغ + وضعیت + روش برداشت + تاریخ ثبت + + + @context.WeekDisplayName + @FormatPrice(context.Amount) + + + @ResolveStatusText(context.Status) + + + @ResolveMethodText(context.Method) + @context.Created + + + + + + + + @foreach (var wd in _withdrawals) + { + + + + @wd.WeekDisplayName + + @ResolveStatusText(wd.Status) + + + + @FormatPrice(wd.Amount) + @ResolveMethodText(wd.Method) + + @wd.Created + + + } + + + } + + + diff --git a/src/FrontOffice.Main/Pages/Profile/WithdrawalRequests.razor.cs b/src/FrontOffice.Main/Pages/Profile/WithdrawalRequests.razor.cs new file mode 100644 index 0000000..3473f3e --- /dev/null +++ b/src/FrontOffice.Main/Pages/Profile/WithdrawalRequests.razor.cs @@ -0,0 +1,123 @@ +using FrontOffice.Main.Utilities; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FrontOffice.Main.Pages.Profile; + +public partial class WithdrawalRequests : ComponentBase +{ + private long _minWithdrawalAmount = 1_000_000; + private List _withdrawals = new(); + private string _statusFilter = "all"; + private bool _isLoading = true; + private bool _isSubmittingWithdrawal; + private long _withdrawPayoutId; + private WithdrawalMethodClient _withdrawMethod = WithdrawalMethodClient.Cash; + private string? _withdrawIban; + + protected override async Task OnInitializedAsync() + { + await LoadData(); + } + + private async Task LoadData() + { + _isLoading = true; + try + { + _withdrawals = await WalletService.GetWithdrawalsAsync(); + var settings = await WalletService.GetWithdrawalSettingsAsync(); + if (settings.MinWithdrawalAmount > 0) + _minWithdrawalAmount = settings.MinWithdrawalAmount; + } + finally + { + _isLoading = false; + } + } + + private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price); + + private async Task SubmitWithdrawal() + { + if (_withdrawPayoutId <= 0) + { + Snackbar.Add("شناسه واریز (PayoutId) الزامی است.", Severity.Warning); + return; + } + if (_withdrawMethod == WithdrawalMethodClient.Cash && string.IsNullOrWhiteSpace(_withdrawIban)) + { + Snackbar.Add("برای برداشت نقدی، شماره شبا لازم است.", Severity.Warning); + return; + } + + try + { + _isSubmittingWithdrawal = true; + await WalletService.RequestWithdrawalAsync(_withdrawPayoutId, _withdrawMethod, _withdrawIban); + Snackbar.Add("درخواست برداشت ثبت شد.", Severity.Success); + + // بروزرسانی لیست + await LoadData(); + + // ریست فرم + _withdrawPayoutId = 0; + _withdrawIban = null; + } + catch (Exception ex) + { + Snackbar.Add($"خطا در ثبت برداشت: {ex.Message}", Severity.Error); + } + finally + { + _isSubmittingWithdrawal = false; + } + } + + private async Task ApplyFilter() + { + _isLoading = true; + try + { + int? status = _statusFilter switch + { + "pending" => 1, + "requested" => 2, + "withdrawn" => 3, + "cancelled" => 4, + _ => null + }; + _withdrawals = await WalletService.GetWithdrawalsAsync(status); + } + finally + { + _isLoading = false; + } + } + + private static string ResolveStatusText(int status) => status switch + { + 0 => "ایجاد شده", + 1 => "در انتظار پرداخت", + 2 => "درخواست برداشت", + 3 => "برداشت شده", + 4 => "لغو شده", + _ => status.ToString() + }; + + private static Color ResolveStatusColor(int status) => status switch + { + 1 => Color.Info, + 2 => Color.Warning, + 3 => Color.Success, + 4 => Color.Error, + _ => Color.Default + }; + + private static string ResolveMethodText(int? method) => method switch + { + 0 => "نقدی (شبا)", + 1 => "الماس", + _ => "-" + }; +} diff --git a/src/FrontOffice.Main/Pages/Store/Cart.razor.cs b/src/FrontOffice.Main/Pages/Store/Cart.razor.cs index 12f6353..9977d37 100644 --- a/src/FrontOffice.Main/Pages/Store/Cart.razor.cs +++ b/src/FrontOffice.Main/Pages/Store/Cart.razor.cs @@ -16,7 +16,16 @@ public partial class Cart : ComponentBase, IDisposable // لود سبد خرید (فقط اگر کاربر لاگین کرده باشد) await CartService.EnsureInitializedAsync(); CartService.OnChange += StateHasChanged; - await VAT.LoadAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // بارگذاری نرخ VAT + await VAT.LoadAsync(); + } + await base.OnAfterRenderAsync(firstRender); } private async Task IncrementQty(long productId) diff --git a/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs b/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs index 2192a91..9cef9d1 100644 --- a/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs +++ b/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs @@ -30,7 +30,16 @@ public partial class CheckoutSummary : ComponentBase await Cart.EnsureInitializedAsync(); await LoadAddresses(); await LoadWalletBalance(); - await VAT.LoadAsync(); + } + + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // بارگذاری نرخ VAT + await VAT.LoadAsync(); + } + await base.OnAfterRenderAsync(firstRender); } private async Task LoadWalletBalance() @@ -79,7 +88,7 @@ public partial class CheckoutSummary : ComponentBase { var request = new SubmitShopBuyOrderRequest { - TotalAmount = Cart.Total + TotalAmount = VAT.AddVAT(Cart.Total) }; var response = await UserOrderContract.SubmitShopBuyOrderAsync(request); diff --git a/src/FrontOffice.Main/Pages/Store/Orders.razor.cs b/src/FrontOffice.Main/Pages/Store/Orders.razor.cs index 35ff7b0..f5207b9 100644 --- a/src/FrontOffice.Main/Pages/Store/Orders.razor.cs +++ b/src/FrontOffice.Main/Pages/Store/Orders.razor.cs @@ -19,7 +19,6 @@ public partial class Orders : ComponentBase _loading = true; try { - await VAT.LoadAsync(); _orders = await OrderService.GetOrdersAsync(); } catch (Exception ex) @@ -33,6 +32,16 @@ public partial class Orders : ComponentBase } } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // بارگذاری نرخ VAT + await VAT.LoadAsync(); + } + await base.OnAfterRenderAsync(firstRender); + } + private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price); diff --git a/src/FrontOffice.Main/Pages/Store/ProductDetail.razor.cs b/src/FrontOffice.Main/Pages/Store/ProductDetail.razor.cs index 3a8ff5a..2c08830 100644 --- a/src/FrontOffice.Main/Pages/Store/ProductDetail.razor.cs +++ b/src/FrontOffice.Main/Pages/Store/ProductDetail.razor.cs @@ -30,7 +30,7 @@ public partial class ProductDetail : ComponentBase, IDisposable private IReadOnlyList _categoryPaths = Array.Empty(); private ProductGalleryImage? _selectedGalleryImage; private readonly List _breadcrumbItems = new(); - private long TotalPrice => VAT.AddVAT((_product?.Price ?? 0) * _qty); + private long TotalPrice => (_product?.Price ?? 0) * _qty; private bool HasDiscount => _product is { Discount: > 0 and < 100 }; private long? OriginalPrice => HasDiscount && _product is not null @@ -55,8 +55,7 @@ public partial class ProductDetail : ComponentBase, IDisposable await Cart.EnsureInitializedAsync(); Cart.OnChange += HandleCartChanged; - // بارگذاری نرخ VAT - await VAT.LoadAsync(); + _loading = true; _product = await ProductService.GetByIdAsync(id); @@ -80,7 +79,15 @@ public partial class ProductDetail : ComponentBase, IDisposable await base.OnInitializedAsync(); } - + protected override async Task OnAfterRenderAsync(bool firstRender) + { + await base.OnAfterRenderAsync(firstRender); + if (firstRender) + { + // بارگذاری نرخ VAT + await VAT.LoadAsync(); + } + } private async Task AddToCart() { diff --git a/src/FrontOffice.Main/Pages/Store/Products.razor.cs b/src/FrontOffice.Main/Pages/Store/Products.razor.cs index 7a6dcef..7156e3f 100644 --- a/src/FrontOffice.Main/Pages/Store/Products.razor.cs +++ b/src/FrontOffice.Main/Pages/Store/Products.razor.cs @@ -26,10 +26,19 @@ public partial class Products : ComponentBase, IDisposable await Cart.EnsureInitializedAsync(); Cart.OnChange += StateHasChanged; Navigation.LocationChanged += HandleLocationChanged; - await VAT.LoadAsync(); await Load(); } + protected override async Task OnAfterRenderAsync(bool firstRender) + { + if (firstRender) + { + // بارگذاری نرخ VAT + await VAT.LoadAsync(); + } + await base.OnAfterRenderAsync(firstRender); + } + private async Task Load() { _loading = true; diff --git a/src/FrontOffice.Main/Shared/WeekSelector.razor b/src/FrontOffice.Main/Shared/WeekSelector.razor new file mode 100644 index 0000000..8af0204 --- /dev/null +++ b/src/FrontOffice.Main/Shared/WeekSelector.razor @@ -0,0 +1,38 @@ +@using FrontOffice.Main.Utilities +@using MudBlazor + + + + + + + @context.DisplayName + @if (context.IsCurrentWeek) + { + هفته جاری + } + + @context.PersianYear + + @context.DateRangeDisplay + + + + هفته‌ای یافت نشد + + diff --git a/src/FrontOffice.Main/Shared/WeekSelector.razor.cs b/src/FrontOffice.Main/Shared/WeekSelector.razor.cs new file mode 100644 index 0000000..881e5cb --- /dev/null +++ b/src/FrontOffice.Main/Shared/WeekSelector.razor.cs @@ -0,0 +1,210 @@ +using FrontOffice.Main.Utilities; +using Microsoft.AspNetCore.Components; +using MudBlazor; + +namespace FrontOffice.Main.Shared; + +public partial class WeekSelector : ComponentBase +{ + [Inject] private CommissionService CommissionService { get; set; } = default!; + + /// + /// Selected week definition + /// + [Parameter] public WeekDefinitionDto? Value { get; set; } + + /// + /// Callback when week selection changes + /// + [Parameter] public EventCallback ValueChanged { get; set; } + + /// + /// Label for the input + /// + [Parameter] public string Label { get; set; } = "انتخاب هفته"; + + /// + /// Placeholder text + /// + [Parameter] public string Placeholder { get; set; } = "هفته را انتخاب کنید..."; + + /// + /// Input variant + /// + [Parameter] public Variant Variant { get; set; } = Variant.Outlined; + + /// + /// Dense mode + /// + [Parameter] public bool Dense { get; set; } = false; + + /// + /// Input margin + /// + [Parameter] public Margin Margin { get; set; } = Margin.Normal; + + /// + /// Allow clearing the selection + /// + [Parameter] public bool Clearable { get; set; } = true; + + /// + /// CSS class + /// + [Parameter] public string? Class { get; set; } + + /// + /// Inline style + /// + [Parameter] public string? Style { get; set; } + + /// + /// Persian year filter + /// + [Parameter] public int? PersianYear { get; set; } + + /// + /// Gregorian year filter + /// + [Parameter] public int? GregorianYear { get; set; } + + /// + /// Only show active weeks + /// + [Parameter] public bool? OnlyActive { get; set; } = true; + + private WeekDefinitionDto? _selectedWeek + { + get => Value; + set + { + if (Value != value) + { + Value = value; + ValueChanged.InvokeAsync(value); + } + } + } + private List _cachedWeeks = new(); + private bool _isLoading = false; + + protected override async Task OnInitializedAsync() + { + // Pre-load weeks + await LoadWeeksAsync(); + } + + private async Task LoadWeeksAsync() + { + try + { + _isLoading = true; + _cachedWeeks = await CommissionService.GetWeekDefinitionsAsync( + searchText: null, + gregorianYear: GregorianYear, + persianYear: PersianYear, + isActive: OnlyActive, + pageSize: 100 + ); + } + catch + { + _cachedWeeks = new List(); + } + finally + { + _isLoading = false; + } + } + + private async Task> SearchWeeksAsync(string searchText, CancellationToken cancellationToken) + { + // If cached weeks are empty, load them + if (!_cachedWeeks.Any()) + { + await LoadWeeksAsync(); + } + + // Filter locally from cache + if (string.IsNullOrWhiteSpace(searchText)) + return _cachedWeeks; + + return _cachedWeeks.Where(w => + w.DisplayName.Contains(searchText, StringComparison.OrdinalIgnoreCase) || + w.StartDatePersian.Contains(searchText, StringComparison.OrdinalIgnoreCase) || + w.EndDatePersian.Contains(searchText, StringComparison.OrdinalIgnoreCase)); + } + + private async Task OnWeekChanged(WeekDefinitionDto? week) + { + _selectedWeek = week; + } + + /// + /// Get current week from cached weeks + /// + public WeekDefinitionDto? GetCurrentWeek() + { + return _cachedWeeks.FirstOrDefault(w => w.IsCurrentWeek); + } + + /// + /// Select current week + /// + public async Task SelectCurrentWeekAsync() + { + var currentWeek = GetCurrentWeek(); + if (currentWeek != null) + { + _selectedWeek = currentWeek; + StateHasChanged(); + } + await Task.CompletedTask; + } + + /// + /// Find week by WeekOrder number (e.g., 46 from ?week=46) + /// + public WeekDefinitionDto? FindByWeekOrder(int weekOrder) + { + return _cachedWeeks.FirstOrDefault(w => w.WeekOrder == weekOrder); + } + + /// + /// Find week by Id + /// + public WeekDefinitionDto? FindById(long id) + { + return _cachedWeeks.FirstOrDefault(w => w.Id == id); + } + + /// + /// Select week by WeekOrder + /// + public async Task SelectByWeekOrderAsync(int weekOrder) + { + var week = FindByWeekOrder(weekOrder); + if (week != null) + { + _selectedWeek = week; + StateHasChanged(); + } + await Task.CompletedTask; + } + + /// + /// Ensure weeks are loaded (useful for parent components) + /// + public async Task EnsureLoadedAsync() + { + if (!_cachedWeeks.Any()) + { + await LoadWeeksAsync(); + } + } + + /// + /// Get all cached weeks + /// + public IReadOnlyList GetCachedWeeks() => _cachedWeeks.AsReadOnly(); +} diff --git a/src/FrontOffice.Main/Utilities/CommissionDtos.cs b/src/FrontOffice.Main/Utilities/CommissionDtos.cs index 453d2be..2d19736 100644 --- a/src/FrontOffice.Main/Utilities/CommissionDtos.cs +++ b/src/FrontOffice.Main/Utilities/CommissionDtos.cs @@ -1,3 +1,5 @@ +using DateTimeConverterCL; + namespace FrontOffice.Main.Utilities; /// @@ -6,8 +8,8 @@ namespace FrontOffice.Main.Utilities; public class CommissionPayoutDto { public long Id { get; set; } - public int WeekNumber { get; set; } - public string WeekLabel { get; set; } = string.Empty; + public long WeekDefinitionId { get; set; } + public string WeekDisplayName { get; set; } = string.Empty; public int BalancesEarned { get; set; } public long TotalAmount { get; set; } public string AmountFormatted { get; set; } = string.Empty; @@ -32,8 +34,8 @@ public class CommissionPayoutsResponseDto /// public class WeeklyBalanceDto { - public int WeekNumber { get; set; } - public string WeekLabel { get; set; } = string.Empty; + public long WeekDefinitionId { get; set; } + public string WeekDisplayName { get; set; } = string.Empty; public long LeftBalance { get; set; } public long RightBalance { get; set; } public long MinBalance { get; set; } @@ -45,12 +47,37 @@ public class WeeklyBalanceDto public DateTime EndDate { get; set; } // Formatted properties - public string LeftBalanceFormatted => $"{LeftBalance:N0} تومان"; - public string RightBalanceFormatted => $"{RightBalance:N0} تومان"; - public string MinBalanceFormatted => $"{MinBalance:N0} تومان"; - public string CalculatedCommissionFormatted => $"{CalculatedCommission:N0} تومان"; - public string LeftCarryoverFormatted => $"{LeftCarryover:N0} تومان"; - public string RightCarryoverFormatted => $"{RightCarryover:N0} تومان"; - public string StartDatePersian => StartDate.ToString("yyyy/MM/dd"); - public string EndDatePersian => EndDate.ToString("yyyy/MM/dd"); + public string LeftBalanceFormatted => $"{LeftBalance:N0} "; + public string RightBalanceFormatted => $"{RightBalance:N0} "; + public string MinBalanceFormatted => $"{MinBalance:N0} "; + public string CalculatedCommissionFormatted => $"{CalculatedCommission:N0} "; + public string LeftCarryoverFormatted => $"{LeftCarryover:N0} "; + public string RightCarryoverFormatted => $"{RightCarryover:N0} "; + public string StartDatePersian => StartDate.MiladiToJalali(); + public string EndDatePersian => EndDate.MiladiToJalali(); +} + +/// +/// DTO for Week Definition (for dropdowns) +/// +public class WeekDefinitionDto +{ + public long Id { get; set; } + public int WeekOrder { get; set; } + public string DisplayName { get; set; } = string.Empty; + public DateTime StartDate { get; set; } + public DateTime EndDate { get; set; } + public int GregorianYear { get; set; } + public int PersianYear { get; set; } + public bool IsActive { get; set; } + public bool IsCurrentWeek { get; set; } + public string StartDatePersian { get; set; } = string.Empty; + public string EndDatePersian { get; set; } = string.Empty; + + // For display in dropdown + public string DropdownDisplay => IsCurrentWeek + ? $"{DisplayName} (هفته جاری)" + : DisplayName; + + public string DateRangeDisplay => $"{StartDate.MiladiToJalali()} - {EndDate.MiladiToJalali()}"; } diff --git a/src/FrontOffice.Main/Utilities/CommissionService.cs b/src/FrontOffice.Main/Utilities/CommissionService.cs index 8a21a1c..f230771 100644 --- a/src/FrontOffice.Main/Utilities/CommissionService.cs +++ b/src/FrontOffice.Main/Utilities/CommissionService.cs @@ -15,12 +15,67 @@ public class CommissionService _client = client; } + /// + /// Get week definitions for dropdown + /// Maps to: CommissionCQ.GetWeekDefinitions + /// + public async Task> GetWeekDefinitionsAsync( + string? searchText = null, + int? gregorianYear = null, + int? persianYear = null, + bool? isActive = null, + int pageSize = 100) + { + try + { + var request = new GetWeekDefinitionsRequest + { + PageNumber = 1, + PageSize = pageSize + }; + + if (!string.IsNullOrWhiteSpace(searchText)) + request.SearchText = searchText; + + if (gregorianYear.HasValue) + request.GregorianYear = gregorianYear.Value; + + if (persianYear.HasValue) + request.PersianYear = persianYear.Value; + + if (isActive.HasValue) + request.IsActive = isActive.Value; + + var response = await _client.GetWeekDefinitionsAsync(request); + + return response.Data.Select(w => new WeekDefinitionDto + { + Id = w.Id, + WeekOrder = w.WeekOrder, + DisplayName = w.DisplayName, + StartDate = w.StartDate?.ToDateTime() ?? DateTime.MinValue, + EndDate = w.EndDate?.ToDateTime() ?? DateTime.MinValue, + GregorianYear = w.GregorianYear, + PersianYear = w.PersianYear, + IsActive = w.IsActive, + IsCurrentWeek = w.IsCurrentWeek, + StartDatePersian = w.StartDatePersian, + EndDatePersian = w.EndDatePersian + }).ToList(); + } + catch + { + // Fallback to mock data if backend is unavailable + return GenerateMockWeekDefinitions(); + } + } + /// /// Get commission payouts with pagination and filters /// Maps to: CommissionCQ.GetMyCommissionPayouts /// public async Task GetMyCommissionPayoutsAsync( - int? weekNumber, + long? weekDefinitionId, string? status, int pageNumber, int pageSize) @@ -33,9 +88,9 @@ public class CommissionService PageSize = pageSize }; - if (weekNumber.HasValue) + if (weekDefinitionId.HasValue) { - request.WeekNumber = $"2025-W{weekNumber:D2}"; + request.WeekDefinitionId = weekDefinitionId.Value; } // Map status string to int @@ -58,8 +113,8 @@ public class CommissionService Payouts = response.Payouts.Select(p => new CommissionPayoutDto { Id = p.Id, - WeekNumber = ExtractWeekNumber(p.WeekNumber), - WeekLabel = p.WeekLabel, + WeekDefinitionId = p.WeekDefinitionId, + WeekDisplayName = p.WeekDisplayName, BalancesEarned = p.BalancesEarned, TotalAmount = p.TotalAmount, AmountFormatted = p.AmountFormatted, @@ -75,7 +130,7 @@ public class CommissionService catch { // Fallback to mock data if backend is unavailable - return GenerateMockPayoutsResponse(weekNumber, status, pageNumber, pageSize); + return GenerateMockPayoutsResponse(weekDefinitionId, status, pageNumber, pageSize); } } @@ -83,7 +138,7 @@ public class CommissionService /// Get weekly balance details for a specific week /// Maps to: CommissionCQ.GetMyWeeklyBalances /// - public async Task GetMyWeeklyBalanceAsync(int? weekNumber = null) + public async Task GetMyWeeklyBalanceAsync(long? weekDefinitionId = null) { try { @@ -94,9 +149,9 @@ public class CommissionService OnlyActive = false }; - if (weekNumber.HasValue) + if (weekDefinitionId.HasValue) { - request.WeekNumber = $"2025-W{weekNumber:D2}"; + request.WeekDefinitionId = weekDefinitionId.Value; } var response = await _client.GetMyWeeklyBalancesAsync(request); @@ -106,8 +161,8 @@ public class CommissionService var balance = response.Balances[0]; return new WeeklyBalanceDto { - WeekNumber = ExtractWeekNumber(balance.WeekNumber), - WeekLabel = $"هفته {ExtractWeekNumber(balance.WeekNumber)} - سال 1404", + WeekDefinitionId = balance.WeekDefinitionId, + WeekDisplayName = balance.WeekDisplayName, LeftBalance = balance.LeftLegBalances, RightBalance = balance.RightLegBalances, MinBalance = Math.Min(balance.LeftLegBalances, balance.RightLegBalances), @@ -120,41 +175,28 @@ public class CommissionService }; } - return CreateMockWeeklyBalance(weekNumber ?? 45); + return CreateMockWeeklyBalance(); } catch { - return CreateMockWeeklyBalance(weekNumber ?? 45); + return CreateMockWeeklyBalance(); } } #region Helper Methods - private static int ExtractWeekNumber(string weekNumberStr) - { - // Format: "2025-W48" → 48 - if (string.IsNullOrEmpty(weekNumberStr)) return 0; - - var parts = weekNumberStr.Split('W'); - if (parts.Length > 1 && int.TryParse(parts[1], out var week)) - { - return week; - } - return 0; - } - - private static WeeklyBalanceDto CreateMockWeeklyBalance(int weekNumber) + private static WeeklyBalanceDto CreateMockWeeklyBalance() { return new WeeklyBalanceDto { - WeekNumber = weekNumber, - WeekLabel = $"هفته {weekNumber} - سال 1404", - LeftBalance = 15_000_000, - RightBalance = 12_000_000, - MinBalance = 12_000_000, - BalanceCount = 12, - CalculatedCommission = 1_200_000, - LeftCarryover = 3_000_000, + WeekDefinitionId = 0, + WeekDisplayName = "داده‌ای یافت نشد", + LeftBalance = 0, + RightBalance = 0, + MinBalance = 0, + BalanceCount = 0, + CalculatedCommission = 0, + LeftCarryover = 0, RightCarryover = 0, StartDate = DateTime.Now.AddDays(-7), EndDate = DateTime.Now @@ -162,13 +204,13 @@ public class CommissionService } private static CommissionPayoutsResponseDto GenerateMockPayoutsResponse( - int? weekNumber, string? status, int pageNumber, int pageSize) + long? weekDefinitionId, string? status, int pageNumber, int pageSize) { var allPayouts = GenerateMockPayouts(50); var filtered = allPayouts.AsEnumerable(); - if (weekNumber.HasValue) - filtered = filtered.Where(p => p.WeekNumber == weekNumber.Value); + if (weekDefinitionId.HasValue) + filtered = filtered.Where(p => p.WeekDefinitionId == weekDefinitionId.Value); if (!string.IsNullOrEmpty(status)) filtered = filtered.Where(p => p.Status == status); @@ -201,8 +243,8 @@ public class CommissionService payouts.Add(new CommissionPayoutDto { Id = i + 1, - WeekNumber = weekNum, - WeekLabel = $"هفته {weekNum} - سال 1404", + WeekDefinitionId = i + 1, + WeekDisplayName = $"هفته {weekNum} - سال 1404", BalancesEarned = balances, TotalAmount = amount, AmountFormatted = $"{amount:N0} تومان", @@ -215,5 +257,35 @@ public class CommissionService return payouts; } + private static List GenerateMockWeekDefinitions() + { + var weeks = new List(); + var persianOrdinals = new[] { "یکم", "دوم", "سوم", "چهارم", "پنجم", "ششم", "هفتم", "هشتم", "نهم", "دهم" }; + + // Generate 10 weeks starting from week 46 + for (int i = 0; i < 10; i++) + { + var weekOrder = i + 1; + var startDate = new DateTime(2025, 11, 8).AddDays(i * 7); + + weeks.Add(new WeekDefinitionDto + { + Id = i + 1, + WeekOrder = weekOrder, + DisplayName = weekOrder <= 10 ? $"هفته {persianOrdinals[weekOrder - 1]}" : $"هفته {weekOrder}", + StartDate = startDate, + EndDate = startDate.AddDays(6), + GregorianYear = 2025, + PersianYear = 1404, + IsActive = true, + IsCurrentWeek = weekOrder == 6, // Assume week 6 is current + StartDatePersian = $"1404/{8 + i}/17", + EndDatePersian = $"1404/{8 + i}/23" + }); + } + + return weeks; + } + #endregion } diff --git a/src/FrontOffice.Main/Utilities/RouteConstants.cs b/src/FrontOffice.Main/Utilities/RouteConstants.cs index 047ec21..5bd7fdd 100644 --- a/src/FrontOffice.Main/Utilities/RouteConstants.cs +++ b/src/FrontOffice.Main/Utilities/RouteConstants.cs @@ -21,6 +21,7 @@ public static class RouteConstants public const string ChangePassword = "/profile/change-password"; public const string Tree = "/profile/tree"; public const string Wallet = "/profile/wallet"; + public const string WithdrawalRequests = "/profile/withdrawal-requests"; } public static class Club diff --git a/src/FrontOffice.Main/Utilities/VATService.cs b/src/FrontOffice.Main/Utilities/VATService.cs index a62219e..84a0253 100644 --- a/src/FrontOffice.Main/Utilities/VATService.cs +++ b/src/FrontOffice.Main/Utilities/VATService.cs @@ -11,6 +11,7 @@ namespace FrontOffice.Main.Utilities; public class VATService { private readonly IServiceProvider _serviceProvider; + private readonly ILocalStorageService _localStorageService; private const string VAT_RATE_KEY = "vat_rate"; private const string VAT_PERCENTAGE_KEY = "vat_percentage"; @@ -22,9 +23,10 @@ public class VATService private bool _isEnabled = true; private bool _isLoaded = false; - public VATService(IServiceProvider serviceProvider) + public VATService(IServiceProvider serviceProvider, ILocalStorageService localStorageService) { _serviceProvider = serviceProvider; + _localStorageService = localStorageService; } /// @@ -51,18 +53,18 @@ public class VATService try { - using var scope = _serviceProvider.CreateScope(); - var localStorage = scope.ServiceProvider.GetRequiredService(); - + // using var scope = _serviceProvider.CreateScope(); + // var localStorage = scope.ServiceProvider.GetRequiredService(); + // // چک کن آیا امروز قبلاً گرفته شده - var savedDate = await localStorage.GetItemAsStringAsync(VAT_DATE_KEY); + var savedDate = await _localStorageService.GetItemAsStringAsync(VAT_DATE_KEY); var today = DateTime.Today.ToString("yyyy-MM-dd"); if (savedDate == today) { // از cache بخوان - var savedRate = await localStorage.GetItemAsync(VAT_RATE_KEY); - var savedPercentage = await localStorage.GetItemAsync(VAT_PERCENTAGE_KEY); + var savedRate = await _localStorageService.GetItemAsync(VAT_RATE_KEY); + var savedPercentage = await _localStorageService.GetItemAsync(VAT_PERCENTAGE_KEY); if (savedRate > 0 && savedPercentage > 0) { _vatRate = savedRate; @@ -92,7 +94,7 @@ public class VATService // ایجاد scope برای دریافت client و localStorage using var scope = _serviceProvider.CreateScope(); var client = scope.ServiceProvider.GetRequiredService(); - var localStorage = scope.ServiceProvider.GetRequiredService(); + // var localStorage = scope.ServiceProvider.GetRequiredService(); var response = await client.GetVATRateAsync(new Google.Protobuf.WellKnownTypes.Empty()); @@ -101,9 +103,9 @@ public class VATService _isEnabled = response.IsEnabled; // ذخیره در LocalStorage - await localStorage.SetItemAsync(VAT_RATE_KEY, _vatRate); - await localStorage.SetItemAsync(VAT_PERCENTAGE_KEY, _vatPercentage); - await localStorage.SetItemAsStringAsync(VAT_DATE_KEY, DateTime.Today.ToString("yyyy-MM-dd")); + await _localStorageService.SetItemAsync(VAT_RATE_KEY, _vatRate); + await _localStorageService.SetItemAsync(VAT_PERCENTAGE_KEY, _vatPercentage); + await _localStorageService.SetItemAsStringAsync(VAT_DATE_KEY, DateTime.Today.ToString("yyyy-MM-dd")); _isLoaded = true; } diff --git a/src/FrontOffice.Main/Utilities/WalletService.cs b/src/FrontOffice.Main/Utilities/WalletService.cs index b958b3d..6f03ef9 100644 --- a/src/FrontOffice.Main/Utilities/WalletService.cs +++ b/src/FrontOffice.Main/Utilities/WalletService.cs @@ -6,7 +6,7 @@ namespace FrontOffice.Main.Utilities; public record WalletBalances(long CreditBalance, long DiscountBalance, long NetworkBalance); public record WalletTransaction(string Date, long Amount, string Channel, string Description); -public record WalletWithdrawal(long Id, string WeekNumber, long Amount, int Status, int? Method, string? Iban, string Created); +public record WalletWithdrawal(long Id, long WeekDefinitionId, string WeekDisplayName, long Amount, int Status, int? Method, string? Iban, string Created); public enum WithdrawalMethodClient { Cash = 0, @@ -134,7 +134,8 @@ public class WalletService return response.Models .Select(m => new WalletWithdrawal( m.Id, - m.WeekNumber, + m.WeekDefinitionId, + m.WeekDisplayName, m.TotalAmount, m.Status, m.WithdrawalMethod, diff --git a/src/FrontOffice.Main/appsettings.json b/src/FrontOffice.Main/appsettings.json index 74a8386..0e9327c 100644 --- a/src/FrontOffice.Main/appsettings.json +++ b/src/FrontOffice.Main/appsettings.json @@ -1,6 +1,6 @@ { -// "GwUrl": "https://frontoffice-bff.foursat.afrino.co", - "GwUrl": "https://localhost:34781", + "GwUrl": "https://frontoffice-bff.foursat.afrino.co", +// "GwUrl": "https://localhost:34781", "DownloadUrl": "https://dl.afrino.co", "EncryptionSettings": { "Key": "kmcQ3XTmH4mrdh8VHziuscyf8LLYjG//Kyni81nH/0E=",