diff --git a/Netina.Api/Netina.Api.csproj b/Netina.Api/Netina.Api.csproj index eed7a18..70857a6 100644 --- a/Netina.Api/Netina.Api.csproj +++ b/Netina.Api/Netina.Api.csproj @@ -75,7 +75,6 @@ - diff --git a/Netina.Core/EntityServices/OrderBagHandlers/SubmitOrderPaymentCommandHandler.cs b/Netina.Core/EntityServices/OrderBagHandlers/SubmitOrderPaymentCommandHandler.cs index d61cd5d..4ac23f1 100644 --- a/Netina.Core/EntityServices/OrderBagHandlers/SubmitOrderPaymentCommandHandler.cs +++ b/Netina.Core/EntityServices/OrderBagHandlers/SubmitOrderPaymentCommandHandler.cs @@ -1,24 +1,14 @@ namespace Netina.Core.EntityServices.OrderBagHandlers; -public class SubmitOrderPaymentCommandHandler : IRequestHandler +public class SubmitOrderPaymentCommandHandler(IMediator mediator, IRepositoryWrapper repositoryWrapper, IPaymentService paymentService, ISmsService smsService, IOptionsSnapshot optionsSnapshot) + : IRequestHandler { - private readonly IMediator _mediator; - private readonly IRepositoryWrapper _repositoryWrapper; - private readonly IPaymentService _paymentService; - private readonly ISmsService _smsService; - - public SubmitOrderPaymentCommandHandler(IMediator mediator, IRepositoryWrapper repositoryWrapper, IPaymentService paymentService,ISmsService smsService) - { - _mediator = mediator; - _repositoryWrapper = repositoryWrapper; - _paymentService = paymentService; - _smsService = smsService; - } public async Task Handle(SubmitOrderPaymentCommand request, CancellationToken cancellationToken) { - await _mediator.Send(new CalculateOrderCommand(request.OrderId, true), cancellationToken); + var _siteSetting = optionsSnapshot.Value; + await mediator.Send(new CalculateOrderCommand(request.OrderId, true), cancellationToken); - var order = await _repositoryWrapper.SetRepository() + var order = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.Id == request.OrderId) .FirstOrDefaultAsync(cancellationToken); @@ -34,46 +24,53 @@ public class SubmitOrderPaymentCommandHandler : IRequestHandler().Update(order); - await _repositoryWrapper.SaveChangesAsync(cancellationToken); - + repositoryWrapper.SetRepository().Update(order); + await repositoryWrapper.SaveChangesAsync(cancellationToken); + if (!_siteSetting.Manager.Phone.IsNullOrEmpty()) + await smsService.SendLookUpAsync(_siteSetting.Manager.Phone, "manager-submitOrder",order.FactorCode,null,null, $"{_siteSetting.Manager.FirstName} {_siteSetting.Manager.LastName}"); } else { response.NeedToPayOnline = true; - var orderSDto = await _repositoryWrapper.SetRepository() + var orderSDto = await repositoryWrapper.SetRepository() .TableNoTracking .Where(o => o.Id == request.OrderId) .Select(OrderMapper.ProjectToSDto) .FirstOrDefaultAsync(cancellationToken); if (orderSDto == null) throw new AppException("Order not found", ApiResultStatusCode.NotFound); - response.PaymentUrl = await _paymentService.GetPaymentLinkAsync(orderSDto.TotalPrice, orderSDto.FactorCode, orderSDto.Id, orderSDto.CustomerId, orderSDto.CustomerPhoneNumber, orderSDto.CustomerFullName, cancellationToken); + response.PaymentUrl = await paymentService.GetPaymentLinkAsync(orderSDto.TotalPrice, orderSDto.FactorCode, orderSDto.Id, orderSDto.CustomerId, orderSDto.CustomerPhoneNumber, orderSDto.CustomerFullName, cancellationToken); } } else if (request.PaymentMethod == OrderPaymentMethod.PayOnDoor) { response.NeedToPayOnline = false; order.SetOrderPayment(request.PaymentMethod); - _repositoryWrapper.SetRepository().Update(order); - await _repositoryWrapper.SaveChangesAsync(cancellationToken); + repositoryWrapper.SetRepository().Update(order); + await repositoryWrapper.SaveChangesAsync(cancellationToken); - await _mediator.Send(new CreateOrUpdatePaymentCommand(null,order.FactorCode, order.TotalPrice, + await mediator.Send(new CreateOrUpdatePaymentCommand(null,order.FactorCode, order.TotalPrice, $"پرداخت نقدی سفارش {order.FactorCode}", string.Empty, string.Empty, string.Empty, PaymentType.PayOnDoor, PaymentStatus.Paid, order.Id , order.CustomerId), cancellationToken); + + if (!_siteSetting.Manager.Phone.IsNullOrEmpty()) + await smsService.SendLookUpAsync(_siteSetting.Manager.Phone, "manager-submitOrder", order.FactorCode, null, null, $"{_siteSetting.Manager.FirstName} {_siteSetting.Manager.LastName}"); } else if (request.PaymentMethod == OrderPaymentMethod.CardTransfer) { response.NeedToPayOnline = false; order.SetOrderPayment(request.PaymentMethod); - _repositoryWrapper.SetRepository().Update(order); - await _repositoryWrapper.SaveChangesAsync(cancellationToken); + repositoryWrapper.SetRepository().Update(order); + await repositoryWrapper.SaveChangesAsync(cancellationToken); - await _mediator.Send(new CreateOrUpdatePaymentCommand(null,order.FactorCode, order.TotalPrice, + await mediator.Send(new CreateOrUpdatePaymentCommand(null,order.FactorCode, order.TotalPrice, $"پرداخت نقدی سفارش {order.FactorCode}", string.Empty, string.Empty, string.Empty, PaymentType.CardTransfer, PaymentStatus.Paid, order.Id , order.CustomerId), cancellationToken); + + if (!_siteSetting.Manager.Phone.IsNullOrEmpty()) + await smsService.SendLookUpAsync(_siteSetting.Manager.Phone, "manager-submitOrder", order.FactorCode, null, null, $"{_siteSetting.Manager.FirstName} {_siteSetting.Manager.LastName}"); } return response; diff --git a/Netina.Core/EntityServices/OrderHandlers/CalculateOrderCommandHandler.cs b/Netina.Core/EntityServices/OrderHandlers/CalculateOrderCommandHandler.cs index 35c97bc..292cc9e 100644 --- a/Netina.Core/EntityServices/OrderHandlers/CalculateOrderCommandHandler.cs +++ b/Netina.Core/EntityServices/OrderHandlers/CalculateOrderCommandHandler.cs @@ -1,19 +1,11 @@ namespace Netina.Core.EntityServices.OrderHandlers; -public class CalculateOrderCommandHandler : IRequestHandler +public class CalculateOrderCommandHandler(IRepositoryWrapper repositoryWrapper, IMediator mediator) : IRequestHandler { - private readonly IRepositoryWrapper _repositoryWrapper; - private readonly IMediator _mediator; - - public CalculateOrderCommandHandler(IRepositoryWrapper repositoryWrapper, IMediator mediator) - { - _repositoryWrapper = repositoryWrapper; - _mediator = mediator; - } public async Task Handle(CalculateOrderCommand request, CancellationToken cancellationToken) { - var order = await _mediator.Send(new GetOrderQuery(request.OrderId), cancellationToken); + var order = await mediator.Send(new GetOrderQuery(request.OrderId), cancellationToken); if (order.OrderStatus != OrderStatus.OrderBag) throw new AppException("Order is not in bag status and cant be calculate", ApiResultStatusCode.BadRequest); var totalProductPrice = order.OrderProducts.Sum(op => op.ProductFee * op.Count); @@ -28,7 +20,7 @@ public class CalculateOrderCommandHandler : IRequestHandler(op.ProductFee - op.ProductFeeWithDiscount) * op.Count); double discountCodePrice = 0; if (!order.DiscountCode.IsNullOrEmpty()) - discountCodePrice += await _mediator.Send(new CalculateOrderDiscountCommand(order.DiscountCode, order),cancellationToken); + discountCodePrice += await mediator.Send(new CalculateOrderDiscountCommand(order.DiscountCode, order),cancellationToken); //var taxesPrice = (((totalProductPrice - discountPrice) + totalPackingPrice + servicePrice) / 100) * _shopSettings.TaxesFee; @@ -37,8 +29,8 @@ public class CalculateOrderCommandHandler : IRequestHandler().Update(order); - await _repositoryWrapper.SaveChangesAsync(cancellationToken); + repositoryWrapper.SetRepository().Update(order); + await repositoryWrapper.SaveChangesAsync(cancellationToken); return order; } } \ No newline at end of file diff --git a/Netina.Core/EntityServices/OrderHandlers/ConfirmOrderStepCommandHandler.cs b/Netina.Core/EntityServices/OrderHandlers/ConfirmOrderStepCommandHandler.cs index 6e4fcb7..7c6f266 100644 --- a/Netina.Core/EntityServices/OrderHandlers/ConfirmOrderStepCommandHandler.cs +++ b/Netina.Core/EntityServices/OrderHandlers/ConfirmOrderStepCommandHandler.cs @@ -1,28 +1,33 @@ -namespace Netina.Core.EntityServices.OrderHandlers; +using MD.PersianDateTime.Standard; -public class ConfirmOrderStepCommandHandler : IRequestHandler +namespace Netina.Core.EntityServices.OrderHandlers; + +public class ConfirmOrderStepCommandHandler(IRepositoryWrapper repositoryWrapper, ISmsService smsService) : IRequestHandler { - private readonly IRepositoryWrapper _repositoryWrapper; - private readonly ISmsService _smsService; - - public ConfirmOrderStepCommandHandler(IRepositoryWrapper repositoryWrapper,ISmsService smsService) - { - _repositoryWrapper = repositoryWrapper; - _smsService = smsService; - } public async Task Handle(ConfirmOrderStepCommand request, CancellationToken cancellationToken) { - var order = await _repositoryWrapper.SetRepository() + var order = await repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(o => o.Id == request.OrderId, cancellationToken); if (order == null) throw new AppException("Order not found", ApiResultStatusCode.NotFound); order.SetOrderStatus(request.NextOrderStatus); - + if (request.NextOrderStatus == OrderStatus.Processing) + { + var customer = await repositoryWrapper.SetRepository().TableNoTracking + .Where(c => c.Id == order.CustomerId) + .Select(CustomerMapper.ProjectToSDto) + .FirstOrDefaultAsync(cancellationToken); + if (customer != null) + { + await smsService.SendLookUpAsync(customer.PhoneNumber, "customer-submitOrder", + (order.TotalPrice/10).ToString("N0"),order.FactorCode,null, $"{customer.FirstName} {customer.LastName}"); + } + } if (request.NextOrderStatus == OrderStatus.Delivered) { - var delivery = await _repositoryWrapper.SetRepository() + var delivery = await repositoryWrapper.SetRepository() .TableNoTracking .FirstOrDefaultAsync(od => od.OrderId == order.Id, cancellationToken); if (delivery != null) @@ -30,23 +35,26 @@ public class ConfirmOrderStepCommandHandler : IRequestHandler() + repositoryWrapper.SetRepository() .Update(delivery); - await _repositoryWrapper.SaveChangesAsync(cancellationToken); + await repositoryWrapper.SaveChangesAsync(cancellationToken); + + } + var customer = await repositoryWrapper.SetRepository().TableNoTracking + .Where(c => c.Id == order.CustomerId) + .Select(CustomerMapper.ProjectToSDto) + .FirstOrDefaultAsync(cancellationToken); + if (customer != null) + { + await smsService.SendLookUpAsync(customer.PhoneNumber, "customer-deliveryOrder", + order.FactorCode, request.TrackingCode,null, PersianDateTime.Today.ToLongDateString(), $"{customer.FirstName} {customer.LastName}"); } } - switch (request.NextOrderStatus) - { - case : - break; - } - - - _repositoryWrapper.SetRepository() + repositoryWrapper.SetRepository() .Update(order); - await _repositoryWrapper.SaveChangesAsync(cancellationToken); + await repositoryWrapper.SaveChangesAsync(cancellationToken); return true; } diff --git a/Netina.Core/Netina.Core.csproj b/Netina.Core/Netina.Core.csproj index 612cf73..f9710f9 100644 --- a/Netina.Core/Netina.Core.csproj +++ b/Netina.Core/Netina.Core.csproj @@ -47,7 +47,6 @@ -