feat(LookUpSms),refactor(OrderDialog),refactor(OrdersPage)
-Add new look up sms when order status changes ( like : customer-orderDelivery lookup , manager-orderSubmit look up) -Change order dialog style and improve responseive -Change orders page style and improve responsiverelease
parent
e54477f226
commit
7d4301423d
|
@ -75,7 +75,6 @@
|
|||
<Using Include="Netina.Core" />
|
||||
<Using Include="Netina.Core.Abstracts" />
|
||||
<Using Include="Netina.Core.BaseServices.Abstracts" />
|
||||
<Using Include="Netina.Core.CoreServices.Abstracts" />
|
||||
<Using Include="Netina.Core.CoreServices.CommandQueries.Commands" />
|
||||
<Using Include="Netina.Core.Models.Api" />
|
||||
<Using Include="Netina.Core.Utilities" />
|
||||
|
|
|
@ -1,24 +1,14 @@
|
|||
namespace Netina.Core.EntityServices.OrderBagHandlers;
|
||||
|
||||
public class SubmitOrderPaymentCommandHandler : IRequestHandler<SubmitOrderPaymentCommand , SubmitOrderPaymentResponseDto>
|
||||
public class SubmitOrderPaymentCommandHandler(IMediator mediator, IRepositoryWrapper repositoryWrapper, IPaymentService paymentService, ISmsService smsService, IOptionsSnapshot<SiteSettings> optionsSnapshot)
|
||||
: IRequestHandler<SubmitOrderPaymentCommand , SubmitOrderPaymentResponseDto>
|
||||
{
|
||||
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<SubmitOrderPaymentResponseDto> 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<Order>()
|
||||
var order = await repositoryWrapper.SetRepository<Order>()
|
||||
.TableNoTracking
|
||||
.Where(o => o.Id == request.OrderId)
|
||||
.FirstOrDefaultAsync(cancellationToken);
|
||||
|
@ -34,46 +24,53 @@ public class SubmitOrderPaymentCommandHandler : IRequestHandler<SubmitOrderPayme
|
|||
{
|
||||
response.NeedToPayOnline = false;
|
||||
order.SetOrderPayment(request.PaymentMethod);
|
||||
_repositoryWrapper.SetRepository<Order>().Update(order);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
|
||||
repositoryWrapper.SetRepository<Order>().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<Order>()
|
||||
var orderSDto = await repositoryWrapper.SetRepository<Order>()
|
||||
.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<Order>().Update(order);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
repositoryWrapper.SetRepository<Order>().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<Order>().Update(order);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
repositoryWrapper.SetRepository<Order>().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;
|
||||
|
|
|
@ -1,19 +1,11 @@
|
|||
namespace Netina.Core.EntityServices.OrderHandlers;
|
||||
|
||||
public class CalculateOrderCommandHandler : IRequestHandler<CalculateOrderCommand,Order>
|
||||
public class CalculateOrderCommandHandler(IRepositoryWrapper repositoryWrapper, IMediator mediator) : IRequestHandler<CalculateOrderCommand,Order>
|
||||
{
|
||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||
private readonly IMediator _mediator;
|
||||
|
||||
public CalculateOrderCommandHandler(IRepositoryWrapper repositoryWrapper, IMediator mediator)
|
||||
{
|
||||
_repositoryWrapper = repositoryWrapper;
|
||||
_mediator = mediator;
|
||||
}
|
||||
|
||||
public async Task<Order> 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<CalculateOrderComman
|
|||
double productDiscountPrice = order.OrderProducts.Sum(op=>(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<CalculateOrderComman
|
|||
order.SetTotalPrice(totalProductPrice, totalPackingPrice, servicePrice, deliveryPrice, productDiscountPrice, discountCodePrice, taxesPrice);
|
||||
order.OrderProducts.Clear();
|
||||
order.OrderDelivery = null;
|
||||
_repositoryWrapper.SetRepository<Order>().Update(order);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
repositoryWrapper.SetRepository<Order>().Update(order);
|
||||
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
return order;
|
||||
}
|
||||
}
|
|
@ -1,28 +1,33 @@
|
|||
namespace Netina.Core.EntityServices.OrderHandlers;
|
||||
using MD.PersianDateTime.Standard;
|
||||
|
||||
public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCommand, bool>
|
||||
namespace Netina.Core.EntityServices.OrderHandlers;
|
||||
|
||||
public class ConfirmOrderStepCommandHandler(IRepositoryWrapper repositoryWrapper, ISmsService smsService) : IRequestHandler<ConfirmOrderStepCommand, bool>
|
||||
{
|
||||
private readonly IRepositoryWrapper _repositoryWrapper;
|
||||
private readonly ISmsService _smsService;
|
||||
|
||||
public ConfirmOrderStepCommandHandler(IRepositoryWrapper repositoryWrapper,ISmsService smsService)
|
||||
{
|
||||
_repositoryWrapper = repositoryWrapper;
|
||||
_smsService = smsService;
|
||||
}
|
||||
public async Task<bool> Handle(ConfirmOrderStepCommand request, CancellationToken cancellationToken)
|
||||
{
|
||||
var order = await _repositoryWrapper.SetRepository<Order>()
|
||||
var order = await repositoryWrapper.SetRepository<Order>()
|
||||
.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<Customer>().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<OrderDelivery>()
|
||||
var delivery = await repositoryWrapper.SetRepository<OrderDelivery>()
|
||||
.TableNoTracking
|
||||
.FirstOrDefaultAsync(od => od.OrderId == order.Id, cancellationToken);
|
||||
if (delivery != null)
|
||||
|
@ -30,23 +35,26 @@ public class ConfirmOrderStepCommandHandler : IRequestHandler<ConfirmOrderStepCo
|
|||
if (request.TrackingCode == null || request.TrackingCode.IsNullOrEmpty())
|
||||
throw new AppException("لطفا کد پیگیری ارسال را پر کنید");
|
||||
delivery.SetTrackingCode(request.TrackingCode);
|
||||
_repositoryWrapper.SetRepository<OrderDelivery>()
|
||||
repositoryWrapper.SetRepository<OrderDelivery>()
|
||||
.Update(delivery);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
|
||||
}
|
||||
var customer = await repositoryWrapper.SetRepository<Customer>().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<Order>()
|
||||
repositoryWrapper.SetRepository<Order>()
|
||||
.Update(order);
|
||||
await _repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
await repositoryWrapper.SaveChangesAsync(cancellationToken);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -47,7 +47,6 @@
|
|||
<Using Include="Netina.Common.Models.Exception" />
|
||||
<Using Include="Netina.Core.Abstracts" />
|
||||
<Using Include="Netina.Core.BaseServices.Abstracts" />
|
||||
<Using Include="Netina.Core.CoreServices.Abstracts" />
|
||||
<Using Include="Netina.Core.CoreServices.CommandQueries.Commands" />
|
||||
<Using Include="Netina.Core.CoreServices.CommandQueries.Queries" />
|
||||
<Using Include="Netina.Core.EntityServices.Abstracts" />
|
||||
|
|
Loading…
Reference in New Issue