Пример #1
0
        public async Task <DialogTurnResult> PostSalesOrderAndViewStepAsync(WaterfallStepContext stepContext,
                                                                            CancellationToken cancellationToken)
        {
            var result = (bool)stepContext.Result;
            var state  = await Accessors.CustomerDataState.GetAsync(stepContext.Context,
                                                                    cancellationToken : cancellationToken);

            var lines = state.TempSalesOrderLines;

            if (!result)
            {
                await Chatter.SendMessageAsync(stepContext.Context, StaticTexts.OrderCanceledText);
            }
            else
            {
                var postSalesOrderDto = new PostSalesOrderDto
                {
                    customerNumber = state.Customer.Number,
                    currencyCode   = "USD"
                };
                var getOrderDto = await Client.PostSalesOrder(postSalesOrderDto);

                var linesDtos = new List <GetSalesOrderLineDto>();
                foreach (var line in lines)
                {
                    var postSalesOrderLineDto = new PostSalesOrderLineDto
                    {
                        itemId   = line.Item.Id,
                        quantity = line.Quantity,
                        lineType = "Item"
                    };
                    var returnedDto = await Client.PostSalesOrderLine(getOrderDto.Id, postSalesOrderLineDto);

                    linesDtos.Add(returnedDto);
                }

                var finalOrder = await Client.GetSalesOrder(getOrderDto.Id);

                await stepContext.Context.SendActivityAsync(
                    MessageFactory.Attachment(
                        StaticTexts.CreatePostedSalesOrderAttachment(finalOrder, linesDtos, state.Customer)),
                    cancellationToken : cancellationToken);

                await Chatter.SendMessageAsync(stepContext.Context, StaticTexts.OrderPostedText);
            }
            await Accessors.CustomerDataState.SetAsync(stepContext.Context, state, cancellationToken);

            await Chatter.SendMessageAsync(stepContext.Context, StaticTexts.AnythingElseText);

            return(await stepContext.EndDialogAsync(cancellationToken : cancellationToken));
        }