protected virtual RefundOrderEto CreateRefundOrderEto(Order order) { if (!order.PaymentId.HasValue) { throw new OrderIsInWrongStageException(order.Id); } var eto = new RefundOrderEto( order.TenantId, order.Id, order.StoreId, order.PaymentId.Value, OrdersConsts.InventoryReductionFailedAutoCancellationReason, OrdersConsts.InventoryReductionFailedAutoCancellationReason, OrdersConsts.InventoryReductionFailedAutoCancellationReason); eto.OrderLines.AddRange(order.OrderLines.Select(x => new OrderLineRefundInfoModel { OrderLineId = x.Id, Quantity = x.Quantity - x.RefundedQuantity, TotalAmount = x.ActualTotalPrice - x.RefundAmount })); eto.OrderExtraFees.AddRange(order.OrderExtraFees.Select(x => new OrderExtraFeeRefundInfoModel { Name = x.Name, Key = x.Key, TotalAmount = x.Fee - x.RefundAmount })); return(eto); }
public async Task Should_Refund_Order() { var handler = ServiceProvider.GetRequiredService <RefundOrderEventHandler>(); var eto = new RefundOrderEto(null, PaymentsTestData.Order1, PaymentsTestData.Store1, PaymentsTestData.Payment1, "Test", null, null); eto.OrderLines.Add(new OrderLineRefundInfoModel { OrderLineId = PaymentsTestData.OrderLine1, Quantity = 2, TotalAmount = 0.4m }); eto.OrderExtraFees.Add(new OrderExtraFeeRefundInfoModel { Name = "Name", Key = "Key", TotalAmount = 0.6m }); await handler.HandleEventAsync(eto); var eventData = TestRefundPaymentEventHandler.LastEto; TestRefundPaymentEventHandler.LastEto = null; eventData.ShouldNotBeNull(); eventData.CreateRefundInput.RefundItems.Count.ShouldBe(1); var refundItem = eventData.CreateRefundInput.RefundItems[0]; refundItem.GetProperty <Guid?>(nameof(RefundItem.OrderId)).ShouldBe(PaymentsTestData.Order1); var orderLines = _jsonSerializer.Deserialize <List <OrderLineRefundInfoModel> >( refundItem.GetProperty <string>(nameof(RefundItem.OrderLines))); orderLines.Count.ShouldBe(1); orderLines[0].OrderLineId.ShouldBe(PaymentsTestData.OrderLine1); orderLines[0].Quantity.ShouldBe(2); orderLines[0].TotalAmount.ShouldBe(0.4m); var orderExtraFees = _jsonSerializer.Deserialize <List <OrderExtraFeeRefundInfoModel> >( refundItem.GetProperty <string>(nameof(RefundItem.OrderExtraFees))); orderExtraFees.Count.ShouldBe(1); orderExtraFees[0].Name.ShouldBe("Name"); orderExtraFees[0].Key.ShouldBe("Key"); orderExtraFees[0].TotalAmount.ShouldBe(0.6m); }
protected virtual async Task TryRefundOrderAsync(Order order) { if (order.PaymentId is null) { return; } var eto = new RefundOrderEto( order.TenantId, order.Id, order.StoreId, order.PaymentId.Value, BookingOrderConsts.BookingOrderAutoCancellationResult, BookingOrderConsts.BookingOrderAutoCancellationResult, BookingOrderConsts.BookingOrderAutoCancellationResult); await _distributedEventBus.PublishAsync(eto); }
protected virtual async Task RefundOrderAsync(RefundOrderEto refundOrderEto) { await _distributedEventBus.PublishAsync(refundOrderEto); }