コード例 #1
0
        public async Task <ValidationResult> ValidateCancelOrderAsync(CancelOrderInput input)
        {
            ValidationResult validationResult = new();

            if (string.IsNullOrWhiteSpace(input.Id))
            {
                validationResult.Messages.Add(new(nameof(CancelOrderInput.Id), "Debe seleccionar una orden de pago."));
            }
            else
            {
                Order order = await _orderRepository.GetAsync(input.Id);

                if (order is null)
                {
                    validationResult.Messages.Add(new(nameof(CancelOrderInput.Id), "La orden de pago no existe."));
                }
                else
                {
                    switch (order.Status)
                    {
                    case OrderStatus.Payed:
                        validationResult.Messages.Add(new(nameof(CancelOrderInput.Id), "No se puede cancelar una orden que ya fue pagada."));
                        break;

                    case OrderStatus.Canceled:
                        validationResult.Messages.Add(new(nameof(CancelOrderInput.Id), "No se puede cancelar una orden que ya fue cancelada."));
                        break;
                    }
                }
            }

            return(validationResult);
        }
コード例 #2
0
 public async Task<CancelOrderOutput> CancelOrderAsync(CancelOrderInput input)
 {
     return new CancelOrderOutput()
     {
         ReturnLabelLocation = "http://returnurl/123",
     };
 }
コード例 #3
0
        public async Task <CancelOrderOutput> CancelOrderAsync(CancelOrderInput input)
        {
            var jobInfo = CreateStartJobInfo(GetProcessKey(nameof(CancelOrderAsync)), input);
            var job     = await _orchestratorClient.ExecuteJobAsync(jobInfo);

            return(JsonConvert.DeserializeObject <CancelOrderOutput>(job.OutputArguments));
        }
コード例 #4
0
ファイル: OrderAppService.cs プロジェクト: yinchang0626/EShop
        public virtual async Task <OrderDto> CancelAsync(Guid id, CancelOrderInput input)
        {
            var order = await GetEntityByIdAsync(id);

            await AuthorizationService.CheckAsync(
                order,
                new OrderOperationAuthorizationRequirement(OrderOperation.Cancellation)
                );

            order = await _orderManager.CancelAsync(order, input.CancellationReason);

            return(await MapToGetOutputDtoAsync(order));
        }
コード例 #5
0
ファイル: OrderAppService.cs プロジェクト: mysharp/EShop
        public virtual async Task<OrderDto> CancelAsync(Guid id, CancelOrderInput input)
        {
            var order = await GetEntityByIdAsync(id);

            if (order.IsPaid() || order.CustomerUserId != CurrentUser.GetId())
            {
                await AuthorizationService.CheckAsync(OrdersPermissions.Orders.Manage);

                // Todo: Check if current user is an admin of the store.
            }

            order = await _orderManager.CancelAsync(order, input.CancellationReason);

            return await MapToGetOutputDtoAsync(order);
        }
コード例 #6
0
        public async Task <OperationResult <OrderDto> > CancelOrderAsync(CancelOrderInput input)
        {
            var validationResult = await _orderValidator.ValidateCancelOrderAsync(input);

            if (validationResult.IsSuccess)
            {
                var order = await _orderRepository.GetAsync(input.Id);

                order.Status = Domain.Shared.Enums.OrderStatus.Canceled;

                await _orderRepository.UpdateAsync(order);

                return(OperationResult <OrderDto> .Success(order.ConvertToDto()));
            }

            return(OperationResult <OrderDto> .Fail(validationResult));
        }
コード例 #7
0
        private async Task <DialogTurnResult> PlaceOrderStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            var message = stepContext.Context.Activity.AsMessageActivity().Text;


            if (message.OrdinalEquals(Resource.Return) || message.OrdinalEquals(Resource.Replace))
            {
                await stepContext.Context.SendActivityAsync(Resource.Working_On);

                var item = (Item)stepContext.Values["SelectedItem"];

                var cancelInput = new CancelOrderInput()
                {
                    OrderId      = item.OrderId,
                    CancelReason = (string)stepContext.Values["Damage"],
                };
                var cancelOrderOutput = await _myRpaClient.CancelOrderAsync(cancelInput);

                var orderCancelMessage = string.Format(Resource.Order_Cancelled, item.OrderId, cancelOrderOutput.ReturnLabelLocation);
                await stepContext.Context.SendActivityAsync(orderCancelMessage);

                if (message.OrdinalEquals(Resource.Replace))
                {
                    var salesOrderInput = new CreateSalesOrderInput()
                    {
                        CustomerId = (string)stepContext.Values[c_customerId],
                        ItemId     = item.ItemId,
                        Quantity   = item.Quantity,
                    };
                    var createSaledOrderOuput = await _myRpaClient.CreateSalesOrderAsync(salesOrderInput);

                    var orderCreatedMessage = string.Format(Resource.Order_Created, createSaledOrderOuput.OrderId, createSaledOrderOuput.DeliveryDate.ToShortDateString());
                    await stepContext.Context.SendActivityAsync(orderCreatedMessage);
                }
                await stepContext.Context.SendActivityAsync(Resource.Anything_Else);
            }
            else
            {
                await stepContext.Context.SendActivityAsync(Resource.Cannot_Understand);
            }

            return(await stepContext.EndDialogAsync());
        }
コード例 #8
0
        public async Task Order_Should_Be_Canceled()
        {
            // Arrange
            await Order_Should_Be_Created();

            Guid orderId = Guid.Empty;

            UsingDbContext(db =>
            {
                var order = db.Orders.First();
                order.OrderStatus.ShouldNotBe(OrderStatus.Canceled);
                order.CanceledTime.ShouldBeNull();
                orderId = order.Id;
            });

            var cancelRequestDto = new CancelOrderInput
            {
                CancellationReason = "Repeat orders."
            };

            // Act
            var response = await _orderAppService.CancelAsync(orderId, cancelRequestDto);

            // Assert
            response.ShouldNotBeNull();
            response.OrderStatus.ShouldBe(OrderStatus.Canceled);
            response.CanceledTime.ShouldNotBeNull();
            response.CancellationReason.ShouldBe("Repeat orders.");

            UsingDbContext(db =>
            {
                var order = db.Orders.FirstOrDefault(o => o.Id == orderId);
                order.ShouldNotBeNull();
                order.OrderStatus.ShouldBe(OrderStatus.Canceled);
                order.CancellationReason.ShouldBe("Repeat orders.");
            });
        }
コード例 #9
0
ファイル: OrderController.cs プロジェクト: yinchang0626/EShop
 public Task <OrderDto> CancelAsync(Guid id, CancelOrderInput input)
 {
     return(_service.CancelAsync(id, input));
 }
コード例 #10
0
        /// <summary>
        /// 取消运单
        /// </summary>
        /// <param name="input"></param>
        /// <returns></returns>
        public async Task <CancelOrderOutput> CancelOrder(CancelOrderInput input)
        {
            input.AccessToken = AccessToken;

            return(await HttpPost <CancelOrderOutput>(_CancelOrderUrl, input));
        }