Files
2026-07-21 15:03:40 +07:00

54 lines
1.7 KiB
C#

using Application.Common.Extensions;
using Application.Common.Repositories;
using Domain.Entities;
using Microsoft.EntityFrameworkCore;
namespace Application.Features.SalesOrderManager;
public class SalesOrderService
{
private readonly ICommandRepository<SalesOrder> _salesOrderRepository;
private readonly ICommandRepository<SalesOrderItem> _salesOrderItemRepository;
private readonly IUnitOfWork _unitOfWork;
public SalesOrderService(
ICommandRepository<SalesOrder> salesOrderRepository,
ICommandRepository<SalesOrderItem> salesOrderItemRepository,
IUnitOfWork unitOfWork
)
{
_salesOrderRepository = salesOrderRepository;
_salesOrderItemRepository = salesOrderItemRepository;
_unitOfWork = unitOfWork;
}
public void Recalculate(string salesOrderId)
{
var salesOrder = _salesOrderRepository
.GetQuery()
.ApplyIsDeletedFilter()
.Where(x => x.Id == salesOrderId)
.Include(x => x.Tax)
.SingleOrDefault();
if (salesOrder == null)
return;
var salesOrderItems = _salesOrderItemRepository
.GetQuery()
.ApplyIsDeletedFilter()
.Where(x => x.SalesOrderId == salesOrderId)
.ToList();
salesOrder.BeforeTaxAmount = salesOrderItems.Sum(x => x.Total ?? 0);
var taxPercentage = salesOrder.Tax?.Percentage ?? 0;
salesOrder.TaxAmount = (salesOrder.BeforeTaxAmount ?? 0) * taxPercentage / 100;
salesOrder.AfterTaxAmount = (salesOrder.BeforeTaxAmount ?? 0) + (salesOrder.TaxAmount ?? 0);
_salesOrderRepository.Update(salesOrder);
_unitOfWork.Save();
}
}