103 lines
3.2 KiB
C#
103 lines
3.2 KiB
C#
using FrontOffice.BFF.UserOrder.Protobuf.Protos.UserOrder;
|
|
using Mapster;
|
|
|
|
namespace FrontOffice.Main.Utilities;
|
|
|
|
// public enum PaymentMethod
|
|
// {
|
|
// Wallet = 1,
|
|
// }
|
|
//
|
|
// public enum OrderStatus
|
|
// {
|
|
// Pending = 0,
|
|
// Paid = 1,
|
|
// }
|
|
|
|
// public record OrderItem(long ProductId, string Title, string ImageUrl, long UnitPrice, int Quantity)
|
|
// {
|
|
// public long LineTotal => UnitPrice * Quantity;
|
|
// }
|
|
//
|
|
// public class Order
|
|
// {
|
|
// public long Id { get; set; }
|
|
// public DateTime CreatedAt { get; set; } = DateTime.Now;
|
|
// public OrderStatus Status { get; set; } = OrderStatus.Pending;
|
|
// public PaymentMethod PaymentMethod { get; set; } = PaymentMethod.Wallet;
|
|
// public long AddressId { get; set; }
|
|
// public string AddressSummary { get; set; } = string.Empty;
|
|
// public List<OrderItem> Items { get; set; } = new();
|
|
// public long Total => Items.Sum(i => i.LineTotal);
|
|
// }
|
|
|
|
public class OrderService
|
|
{
|
|
private long _seq = 1000;
|
|
private readonly List<GetUserOrderResponse> _orders = new();
|
|
private readonly UserOrderContract.UserOrderContractClient _userOrderContractClient;
|
|
|
|
public OrderService(UserOrderContract.UserOrderContractClient userOrderContractClient)
|
|
{
|
|
_userOrderContractClient = userOrderContractClient;
|
|
}
|
|
|
|
public async Task<List<GetUserOrderResponse>> GetOrdersAsync()
|
|
{
|
|
var result = await _userOrderContractClient.GetAllUserOrderByFilterAsync(new());
|
|
if (result != null && result.Models.Count > 0)
|
|
{
|
|
foreach (var item in result.Models)
|
|
{
|
|
var order = new GetUserOrderResponse();
|
|
if (_orders.All(a => a.Id != item.Id))
|
|
{
|
|
TypeAdapterConfig.GlobalSettings.NewConfig<GetUserOrderResponseFactorDetail, GetUserOrderResponseFactorDetail>()
|
|
.Map(dest => dest.ProductThumbnailPath, src => src.ProductThumbnailPath);
|
|
order= item.Adapt<GetUserOrderResponse>();
|
|
order.FactorDetails.AddRange(item.FactorDetails.Adapt<List<GetUserOrderResponseFactorDetail>>());
|
|
_orders.Add(order);
|
|
}
|
|
}
|
|
}
|
|
|
|
return _orders.OrderByDescending(o => o.PaymentDate).ToList();
|
|
}
|
|
|
|
public async Task<GetUserOrderResponse?> GetOrderAsync(long id)
|
|
{
|
|
var order = _orders.FirstOrDefault(o => o.Id == id);
|
|
if (order == null)
|
|
{
|
|
var result = await _userOrderContractClient.GetUserOrderAsync(new GetUserOrderRequest()
|
|
{
|
|
Id = id
|
|
});
|
|
_orders.Add(result);
|
|
return result;
|
|
}
|
|
|
|
return order;
|
|
}
|
|
|
|
/// <summary>
|
|
/// دریافت نرخ مالیات بر ارزش افزوده
|
|
/// </summary>
|
|
public async Task<GetVATRateResponse> GetVATRateAsync()
|
|
{
|
|
try
|
|
{
|
|
return await _userOrderContractClient.GetVATRateAsync(new Google.Protobuf.WellKnownTypes.Empty());
|
|
}
|
|
catch
|
|
{
|
|
// در صورت خطا، مقادیر پیشفرض
|
|
return new GetVATRateResponse
|
|
{
|
|
VatRate = 0.10,
|
|
VatPercentage = 10,
|
|
IsEnabled = true
|
|
};
|
|
}
|
|
}
|
|
} |