Exemple #1
0
        private async Task <DialogTurnResult> AskForActionStepAsync(WaterfallStepContext stepContext, CancellationToken cancellationToken)
        {
            Type type = stepContext.Options.GetType();

            if (type == typeof(UserProfile))
            {
                var user = (UserProfile)stepContext.Options;
                stepContext.Values[FROMNOTIFICATION] = true;

                var prestashopUser = (await PrestashopApi.GetCustomerById(user.PrestashopId.Value)).First();

                string confirmMsg = $"{prestashopUser.GetFullName()} has an order pending for confirmation. Would you like to" +
                                    $"confirm it now?";

                var promptOptions = new PromptOptions
                {
                    Prompt      = MessageFactory.Text(confirmMsg),
                    RetryPrompt = MessageFactory.Text(confirmMsg + "(Yes / No)")
                };

                return(await stepContext.PromptAsync(nameof(ConfirmPrompt), promptOptions, cancellationToken));
            }
            else
            {
                stepContext.Values[FROMNOTIFICATION] = false;
                return(await stepContext.NextAsync(null, cancellationToken));
            }
        }
Exemple #2
0
        public async Task RequestValidationAsync(string id)
        {
            var superusers = await UserController.GetUsersByPermissionLevelAsync(PermissionLevels.Superuser);

            var requestingUser = await UserController.GetUserByBotIdAsync(id);

            var prestashopUser = (await PrestashopApi.GetCustomerById(requestingUser.PrestashopId.Value)).First();

            // We declare a local function to use as BotCallBackHandler in the ContinueConversationAsync Method
            async Task botCallBack(ITurnContext turnContext, CancellationToken cancellationToken) =>
            await turnContext.SendActivityAsync($"User {prestashopUser.GetFullName()} would like to get his account validated.");

            foreach (Models.UserProfile superuser in superusers)
            {
                var conversationReference = _conversationReferences[superuser.BotUserId];

                await((BotAdapter)_adapter).ContinueConversationAsync(_appId, conversationReference, botCallBack, default);
            }
        }
Exemple #3
0
        public async Task <Attachment> ToAdaptiveCard(IPrestashopApi prestashopApi)
        {
            var card = CardUtils.CreateCardFromJson("confirmOrderCard");

            var user = (await prestashopApi.GetCustomerById(User.PrestashopId.Value)).First();

            //Ara hem convertit el JSON a un AdaptiveCard i editarem els fragments que ens interessen.

            //Primer editem el FactSet (informació de l'usuari que sortirà a la fitxa).
            var containerFact = (card.Body[1] as AdaptiveContainer);
            var factSet       = (containerFact.Items[1] as AdaptiveFactSet);

            factSet.Facts.Add(new AdaptiveFact("Ordered by:", user.GetFullName()));
            factSet.Facts.Add(new AdaptiveFact("Company:", user.Company));

            //Ara editarem la informació que sortirà dels productes
            var containerProducts = (card.Body[3] as AdaptiveContainer);

            foreach (OrderLine orderLine in OrderLine)
            {
                AdaptiveColumnSet columns       = new AdaptiveColumnSet();
                AdaptiveColumn    productColumn = new AdaptiveColumn();

                var product = (await prestashopApi.GetProductById(orderLine.ProductId)).First();

                AdaptiveTextBlock productText = new AdaptiveTextBlock(product.GetNameByLanguage(Languages.English));
                productText.Wrap = true;

                productColumn.Width = "stretch";
                productColumn.Items.Add(productText);
                columns.Columns.Add(productColumn);

                AdaptiveColumn amountColumn = new AdaptiveColumn();

                AdaptiveTextBlock amount = new AdaptiveTextBlock(orderLine.Amount.ToString());
                amount.Wrap = true;

                amountColumn.Width = "auto";
                amountColumn.Items.Add(amount);
                columns.Columns.Add(amountColumn);

                containerProducts.Items.Add(columns);
            }

            var attachment = new Attachment()
            {
                Content     = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(card)),
                ContentType = "application/vnd.microsoft.card.adaptive"
            };

            return(attachment);
        }
Exemple #4
0
        public static async Task <Order> BuildOrderAsync(Models.Cart cart, IPrestashopApi prestashopApi)
        {
            var prestaCart = await CartToPost.BuildCartAsync(cart, prestashopApi);

            var postedCart = await prestashopApi.PostCart(prestaCart);

            var customer = (await prestashopApi.GetCustomerById(cart.User.PrestashopId.Value)).First();

            var customerAddresses = await prestashopApi.GetAddressByCustomer(cart.User.PrestashopId.Value);

            var customerAddress = customerAddresses.First();

            var order = new PostOrder(customer, postedCart.Cart, customerAddress);

            double totalPrice = 0;

            foreach (CartRow row in prestaCart.Cart.Rows.Rows)
            {
                var product = (await prestashopApi.GetProductById(row.ProductId)).First();

                totalPrice += product.Price;

                order.OrderRows.Rows.Add(
                    new OrderRow(product, row.Quantity)
                    );
            }

            order.TotalProducts        = totalPrice;
            order.TotalProductsWithTax = totalPrice * 1.21;
            order.TotalPaidTaxExcluded = totalPrice;
            order.TotalPaidTaxIncluded = totalPrice * 1.21;
            order.TotalPaid            = totalPrice * 1.21;

            var prestaOrder = new OrderToPost {
                Order = order
            };

            System.Xml.Serialization.XmlSerializer writer =
                new System.Xml.Serialization.XmlSerializer(typeof(OrderToPost));

            var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "//SerializationOverview.xml";

            System.IO.FileStream file = System.IO.File.Create(path);

            writer.Serialize(file, prestaOrder);
            file.Close();

            var postedOrder = await prestashopApi.PostOrder(prestaOrder);

            return(await Task.FromResult(postedOrder.Order));
        }
Exemple #5
0
        async public static Task <RequestedInfo> BuildRequestedInfoAsync(Models.Cart cart, IPrestashopApi prestashopApi)
        {
            var customer = (await prestashopApi.GetCustomerById(cart.User.Id)).First();

            var productString = "";

            foreach (OrderLine line in cart.OrderLine)
            {
                var product = (await prestashopApi.GetProductById(line.ProductId)).First();

                productString += "- " + product.GetNameByLanguage(Languages.English) + "\n\n";
            }

            return(new RequestedInfo(cart.Id, customer.Company, productString));
        }
Exemple #6
0
        public static async Task <CartToPost> BuildCartAsync(Models.Cart cart, IPrestashopApi prestashopApi)
        {
            var customer = (await prestashopApi.GetCustomerById(cart.User.PrestashopId.Value)).First();

            var prestaCart = new CartToPost()
            {
                Cart = new PostCart(customer)
            };

            var rowCollection = new CartRowCollection();

            foreach (Models.OrderLine line in cart.OrderLine)
            {
                var row = new CartRow(line.ProductId, line.Amount);
                rowCollection.Rows.Add(row);
            }

            prestaCart.Cart.Rows = rowCollection;

            return(await Task.FromResult(prestaCart));
        }