diff --git a/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor b/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor index 611ecab..d55b8bc 100644 --- a/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor +++ b/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor @@ -35,6 +35,40 @@ } + @if (_authLoaded && !_isClubMemberActive) + { + + + + برای شارژ کیف پول اصلی ابتدا باید پکیج را خریداری کرده و قرارداد باشگاه مشتریان را امضا کنید. + + + @if (!_hasPurchasedPackage) + { + + مشاهده پکیج‌ها + + } + else + { + + امضای قرارداد باشگاه + + } + + بازگشت به کیف پول + + + + + } + else if (_authLoaded) + { @@ -122,5 +156,6 @@ + } diff --git a/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor.cs b/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor.cs index 4237af7..816aada 100644 --- a/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor.cs +++ b/src/FrontOffice.Main/Pages/Profile/ChargeCreditWallet.razor.cs @@ -7,10 +7,15 @@ namespace FrontOffice.Main.Pages.Profile; public partial class ChargeCreditWallet : ComponentBase { + [Inject] private AuthService AuthService { get; set; } = default!; + private bool _isProcessing; private long _chargeAmount; private string? _paymentResult; private string? _pendingReturnUrl; + private bool _isClubMemberActive; + private bool _hasPurchasedPackage; + private bool _authLoaded; private readonly long[] _presetAmounts = { 500_000, 1_000_000, 5_000_000, 10_000_000, 20_000_000, 50_000_000 }; @@ -23,7 +28,7 @@ public partial class ChargeCreditWallet : ComponentBase [SupplyParameterFromQuery(Name = "returnUrl")] public string? ReturnUrlQueryParam { get; set; } - protected override void OnInitialized() + protected override async Task OnInitializedAsync() { _paymentResult = PaymentQueryParam; @@ -32,11 +37,27 @@ public partial class ChargeCreditWallet : ComponentBase if (CreditChargeNavigation.IsValidReturnUrl(ReturnUrlQueryParam)) _pendingReturnUrl = ReturnUrlQueryParam; + + try + { + var userInfo = await AuthService.GetUserAuthInfo(); + _isClubMemberActive = userInfo.IsClubMemberActive; + _hasPurchasedPackage = userInfo.HasPurchasedPackage; + } + catch + { + _isClubMemberActive = false; + _hasPurchasedPackage = false; + } + finally + { + _authLoaded = true; + } } protected override async Task OnAfterRenderAsync(bool firstRender) { - if (firstRender && !string.IsNullOrEmpty(_pendingReturnUrl)) + if (firstRender && !string.IsNullOrEmpty(_pendingReturnUrl) && _isClubMemberActive) { await CreditChargeNavigation.SaveReturnUrlAsync(JSRuntime, _pendingReturnUrl); } @@ -46,6 +67,14 @@ public partial class ChargeCreditWallet : ComponentBase private async Task StartCreditCharge() { + if (!_isClubMemberActive) + { + Snackbar.Add( + "برای شارژ کیف پول اصلی ابتدا باید پکیج را خریداری کرده و قرارداد باشگاه مشتریان را امضا کنید.", + Severity.Warning); + return; + } + if (_chargeAmount <= 0 || _isProcessing) return; _isProcessing = true; diff --git a/src/FrontOffice.Main/Pages/Profile/Wallet.razor b/src/FrontOffice.Main/Pages/Profile/Wallet.razor index 6670c39..d52d737 100644 --- a/src/FrontOffice.Main/Pages/Profile/Wallet.razor +++ b/src/FrontOffice.Main/Pages/Profile/Wallet.razor @@ -39,15 +39,55 @@ - - شارژ کیف‌پول اصلی - + @if (_isClubMemberActive) + { + + شارژ کیف‌پول اصلی + + } + else + { + + + + شارژ کیف‌پول اصلی + + + برای شارژ کیف پول اصلی ابتدا باید پکیج را خریداری کرده و قرارداد باشگاه مشتریان را امضا کنید. + + + @if (!_hasPurchasedPackage) + { + + مشاهده پکیج‌ها + + } + else + { + + امضای قرارداد باشگاه + + } + + + + } _txs = new(); private string? _filterReferenceId; private string _filterType = "all"; + private bool _isClubMemberActive; + private bool _hasPurchasedPackage; protected override async Task OnInitializedAsync() { + try + { + var userInfo = await AuthService.GetUserAuthInfo(); + _isClubMemberActive = userInfo.IsClubMemberActive; + _hasPurchasedPackage = userInfo.HasPurchasedPackage; + } + catch + { + _isClubMemberActive = false; + _hasPurchasedPackage = false; + } + var b = await WalletService.GetBalancesAsync(); _balances = (FormatPrice(b.CreditBalance), FormatPrice(b.DiscountBalance), FormatPrice(b.NetworkBalance)); _txs = await WalletService.GetTransactionsAsync(); diff --git a/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs b/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs index 19805ec..d199997 100644 --- a/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs +++ b/src/FrontOffice.Main/Pages/Store/CheckoutSummary.razor.cs @@ -125,11 +125,26 @@ public partial class CheckoutSummary : ComponentBase return false; var shortfall = totalRequired - walletBalance; + var allowCharge = false; + var hasPurchasedPackage = false; + try + { + var userInfo = await AuthService.GetUserAuthInfo(); + allowCharge = userInfo.IsClubMemberActive; + hasPurchasedPackage = userInfo.HasPurchasedPackage; + } + catch + { + allowCharge = false; + } + var parameters = new DialogParameters { { x => x.CurrentBalance, walletBalance }, { x => x.RequiredAmount, totalRequired }, - { x => x.ShortfallAmount, shortfall } + { x => x.ShortfallAmount, shortfall }, + { x => x.AllowChargeCredit, allowCharge }, + { x => x.HasPurchasedPackage, hasPurchasedPackage } }; var dialog = await DialogService.ShowAsync( @@ -143,7 +158,7 @@ public partial class CheckoutSummary : ComponentBase }); var result = await dialog.Result; - if (result is { Canceled: false } && result.Data is long chargeShortfall) + if (allowCharge && result is { Canceled: false } && result.Data is long chargeShortfall) { var chargeAmount = CreditChargeNavigation.NormalizeChargeAmount(chargeShortfall); Navigation.NavigateTo(CreditChargeNavigation.BuildChargeUrl( diff --git a/src/FrontOffice.Main/Shared/InsufficientCreditDialog.razor b/src/FrontOffice.Main/Shared/InsufficientCreditDialog.razor index da14999..b55951d 100644 --- a/src/FrontOffice.Main/Shared/InsufficientCreditDialog.razor +++ b/src/FrontOffice.Main/Shared/InsufficientCreditDialog.razor @@ -1,3 +1,5 @@ +@using FrontOffice.Main.Utilities + @@ -7,9 +9,19 @@ - - برای تکمیل این سفارش، موجودی اصلی شما کافی نیست. می‌توانید کیف پول را شارژ کنید و سپس سفارش را ثبت کنید. - + @if (AllowChargeCredit) + { + + برای تکمیل این سفارش، موجودی اصلی شما کافی نیست. می‌توانید کیف پول را شارژ کنید و سپس سفارش را ثبت کنید. + + } + else + { + + برای شارژ کیف پول اصلی ابتدا باید پکیج را خریداری کرده و قرارداد باشگاه مشتریان را امضا کنید. + + } + @@ -31,12 +43,33 @@ بستن - - شارژ حساب اصلی - + @if (AllowChargeCredit) + { + + شارژ حساب اصلی + + } + else if (!HasPurchasedPackage) + { + + مشاهده پکیج‌ها + + } + else + { + + امضای قرارداد باشگاه + + } @@ -53,9 +86,28 @@ [Parameter] public long ShortfallAmount { get; set; } + /// اگر false باشد، به صفحه شارژ هدایت نمی‌شود. + [Parameter] + public bool AllowChargeCredit { get; set; } = true; + + [Parameter] + public bool HasPurchasedPackage { get; set; } + private void Cancel() => MudDialog.Cancel(); private void GoToCharge() => MudDialog.Close(DialogResult.Ok(ShortfallAmount)); + private void GoToPackages() + { + MudDialog.Cancel(); + Navigation.NavigateTo(RouteConstants.Package.List); + } + + private void GoToClubMembership() + { + MudDialog.Cancel(); + Navigation.NavigateTo(RouteConstants.Club.Membership); + } + private static string FormatPrice(long price) => string.Format("{0:N0} تومان", price); }