diff --git a/src/BackOffice/BackOffice.csproj b/src/BackOffice/BackOffice.csproj
index 32ce305..f626858 100644
--- a/src/BackOffice/BackOffice.csproj
+++ b/src/BackOffice/BackOffice.csproj
@@ -138,7 +138,7 @@
-
+
diff --git a/src/BackOffice/Pages/Payment/Components/ManualPaymentDialog.razor b/src/BackOffice/Pages/Payment/Components/ManualPaymentDialog.razor
index dd34aeb..0d357d3 100644
--- a/src/BackOffice/Pages/Payment/Components/ManualPaymentDialog.razor
+++ b/src/BackOffice/Pages/Payment/Components/ManualPaymentDialog.razor
@@ -1,4 +1,5 @@
@using CMSMicroservice.Protobuf.Protos.ManualPayment
+@using CMSMicroservice.Protobuf.Protos.Package
@using BackOffice.Pages.Payment.Components
@using BackOffice.Pages.AutoComplete
@using Microsoft.AspNetCore.Components.Forms
@@ -13,15 +14,28 @@
-
+
+ @foreach (var pkg in _packages)
+ {
+
+ @pkg.Title — @pkg.Price.ToString("N0") تومان
+
+ }
+
+
+ @if (_selectedPackagePrice.HasValue)
+ {
+
+ مبلغ پکیج: @_selectedPackagePrice.Value.ToString("N0") تومان — این مبلغ به کیفپول کاربر اضافه میشود.
+
+ }
_packages = new();
+
// Type and Description
private int _selectedType = 1; // Default: CashDeposit
private string _description = "عضویت دستی باشگاه مشتریان";
@@ -48,6 +53,46 @@ public partial class ManualPaymentDialog
private bool _isSubmitting;
+ protected override async Task OnInitializedAsync()
+ {
+ await LoadPackages();
+ }
+
+ private async Task LoadPackages()
+ {
+ try
+ {
+ var request = new GetAllPackageByFilterRequest
+ {
+ PaginationState = new() { PageNumber = 1, PageSize = 100 },
+ Filter = new()
+ };
+
+ var result = await PackageClient.GetAllPackageByFilterAsync(request);
+ _packages = result.Models?.OrderBy(p => p.SortOrder).ToList()
+ ?? new List();
+
+ // اگر پکیج پایه وجود دارد، پیشفرض انتخاب کن
+ var basePackage = _packages.FirstOrDefault(p => p.IsBasePackage);
+ if (basePackage != null)
+ {
+ _selectedPackageId = basePackage.Id;
+ _selectedPackagePrice = basePackage.Price;
+ }
+ }
+ catch
+ {
+ _packages = new List();
+ }
+ }
+
+ private void OnPackageChanged(long? packageId)
+ {
+ _selectedPackageId = packageId;
+ var pkg = _packages.FirstOrDefault(p => p.Id == packageId);
+ _selectedPackagePrice = pkg?.Price;
+ }
+
private async Task OnImageFileSelected(IBrowserFile? file)
{
if (file == null)
@@ -81,6 +126,12 @@ public partial class ManualPaymentDialog
return;
}
+ if (!_selectedPackageId.HasValue || _selectedPackageId.Value <= 0)
+ {
+ Snackbar.Add("لطفاً پکیج را انتخاب کنید.", Severity.Warning);
+ return;
+ }
+
if (_selectedType <= 0)
{
Snackbar.Add("لطفاً نوع پرداخت را انتخاب کنید.", Severity.Warning);
@@ -101,7 +152,8 @@ public partial class ManualPaymentDialog
var request = new CreateManualPaymentRequest
{
UserId = _selectedUserId.Value,
- Amount = _createModel.Amount,
+ Amount = 0, // deprecated — مبلغ از پکیج خوانده میشود
+ PackageId = _selectedPackageId.Value,
Type = (ManualPaymentType)_selectedType,
Description = _description
};