Files
FrontOffice/src/FrontOffice.Main/Pages/Store/OrderTracking.razor.cs
T
masoodafar-web 6db83ccd90
Build and Deploy to Kubernetes / build-and-deploy (push) Failing after 4m55s
feat: full FrontOffice updates - discount store, blog, payment gateway, UI improvements
- Discount store pages (products, cart, orders, order detail)
- Blog pages and services
- Payment gateway callback page
- AppImage component, EmptyState, LoadingState, PageHeader
- DiscountCartService, DiscountOrderService, DiscountProductService
- BlogCategoryService, BlogPostService, SitePageService, ImageCacheService
- PhoneVerifyForm component
- Profile Hub page
- UI/UX improvements across all pages
- landing.js for homepage
- Config and routing updates
2026-02-16 00:51:39 +03:30

131 lines
4.1 KiB
C#

using CMSMicroservice.Protobuf.Protos.UserOrder;
using FrontOffice.Main.Utilities;
using Microsoft.AspNetCore.Components;
using Microsoft.JSInterop;
using Messages = CMSMicroservice.Protobuf.Protos;
namespace FrontOffice.Main.Pages.Store;
public partial class OrderTracking : ComponentBase
{
[Inject] private OrderService OrderService { get; set; } = default!;
[Inject] private IJSRuntime JS { get; set; } = default!;
[Parameter] public long id { get; set; }
private GetUserOrderResponse? _order;
private bool _loading = true;
private List<TrackingStep> _trackingSteps = new();
protected override async Task OnInitializedAsync()
{
await LoadOrderAsync();
}
private async Task LoadOrderAsync()
{
_loading = true;
StateHasChanged();
try
{
var response = await OrderService.GetOrderAsync(id);
if (response is not null)
{
_order = response;
BuildTrackingSteps();
}
}
finally
{
_loading = false;
StateHasChanged();
}
}
private void BuildTrackingSteps()
{
if (_order is null) return;
// Build tracking steps based on PaymentStatus
var isPaid = _order.PaymentStatus == Messages.PaymentStatus.Success;
_trackingSteps = new List<TrackingStep>
{
new()
{
Title = "ثبت سفارش",
Description = "سفارش شما با موفقیت ثبت شد",
IsCompleted = true,
Date = FormatDate(_order.PaymentDate)
},
new()
{
Title = "در انتظار پرداخت",
Description = "منتظر تایید پرداخت هستیم",
IsCompleted = isPaid,
IsCurrent = !isPaid,
Date = isPaid ? FormatDate(_order.PaymentDate) : ""
},
new()
{
Title = "تایید پرداخت",
Description = "پرداخت شما تایید شد",
IsCompleted = isPaid,
IsCurrent = false,
Date = isPaid ? FormatDate(_order.PaymentDate) : ""
},
new()
{
Title = "در حال پردازش",
Description = "سفارش شما در حال آماده‌سازی است",
IsCompleted = false,
IsCurrent = isPaid,
Date = ""
},
new()
{
Title = "ارسال شده",
Description = "سفارش شما به پست تحویل داده شد",
IsCompleted = false,
IsCurrent = false,
Date = ""
},
new()
{
Title = "تحویل داده شده",
Description = "سفارش به دست شما رسید",
IsCompleted = false,
IsCurrent = false,
Date = ""
}
};
}
private static string FormatDate(Google.Protobuf.WellKnownTypes.Timestamp? timestamp)
{
if (timestamp is null) return "";
var date = timestamp.ToDateTime();
var persianCalendar = new System.Globalization.PersianCalendar();
return $"{persianCalendar.GetYear(date)}/{persianCalendar.GetMonth(date):00}/{persianCalendar.GetDayOfMonth(date):00}";
}
private static string GetPaymentMethodText(Messages.PaymentMethod method) => method switch
{
Messages.PaymentMethod.Ipg => "پرداخت آنلاین",
Messages.PaymentMethod.Wallet => "کیف پول",
_ => "نامشخص"
};
private class TrackingStep
{
public string Title { get; set; } = "";
public string Description { get; set; } = "";
public bool IsCompleted { get; set; }
public bool IsCurrent { get; set; }
public string Date { get; set; } = "";
}
private async Task GoBack() => await JS.InvokeVoidAsync("history.back");
}