Files
blazor-scm/Features/Purchase/PaymentDisburse/Cqrs/GetBillDetailForPaymentHandler.cs
T
2026-07-21 14:28:43 +07:00

52 lines
2.1 KiB
C#

using Indotalent.Infrastructure.Database;
using MediatR;
using Microsoft.EntityFrameworkCore;
namespace Indotalent.Features.Purchase.PaymentDisburse.Cqrs;
public record GetBillDetailForPaymentQuery(string BillId) : IRequest<GetPaymentDisburseByIdResponse?>;
public class GetBillDetailForPaymentHandler : IRequestHandler<GetBillDetailForPaymentQuery, GetPaymentDisburseByIdResponse?>
{
private readonly AppDbContext _context;
public GetBillDetailForPaymentHandler(AppDbContext context) => _context = context;
public async Task<GetPaymentDisburseByIdResponse?> Handle(GetBillDetailForPaymentQuery request, CancellationToken cancellationToken)
{
var bill = await _context.Bill
.AsNoTracking()
.Include(x => x.PurchaseOrder)
.ThenInclude(po => po!.Vendor)
.Include(x => x.PurchaseOrder)
.ThenInclude(po => po!.PurchaseOrderItemList)
.ThenInclude(pi => pi.Product)
.FirstOrDefaultAsync(x => x.Id == request.BillId, cancellationToken);
if (bill == null) return null;
var purchaseOrder = bill.PurchaseOrder;
return new GetPaymentDisburseByIdResponse
{
BillId = bill.Id,
BillNumber = bill.AutoNumber,
VendorName = purchaseOrder?.Vendor?.Name,
VendorStreet = purchaseOrder?.Vendor?.Street,
VendorCity = purchaseOrder?.Vendor?.City,
PurchaseOrderBeforeTaxAmount = purchaseOrder?.BeforeTaxAmount ?? 0,
PurchaseOrderTaxAmount = purchaseOrder?.TaxAmount ?? 0,
PurchaseOrderAfterTaxAmount = purchaseOrder?.AfterTaxAmount ?? 0,
PaymentAmount = purchaseOrder?.AfterTaxAmount ?? 0,
Items = purchaseOrder?.PurchaseOrderItemList.Select(x => new PaymentDisburseItemResponse
{
Id = x.Id,
ProductId = x.ProductId,
ProductName = x.Product?.Name,
Summary = x.Summary,
UnitPrice = x.UnitPrice ?? 0,
Quantity = x.Quantity ?? 0,
Total = x.Total ?? 0
}).ToList() ?? new()
};
}
}