Esempio n. 1
0
        async Task AddToBasket(int maxCountProduct)
        {
            /// Если пользователь не зарегистрирован или товар из локальной корзины
            if (User.Singleton == null || (oldBasket != null && oldBasket.IsLocalBasket))
            {
                BasketDB basketBD = new BasketDB {
                    ProductID      = ProductItem.ProductsID,
                    Article        = ProductItem.Article,
                    ProductName    = ProductItem.productsDescription.Name,
                    SizeName       = selectSize.Value,
                    Image          = ProductItem.Image,
                    SizeID         = selectSize.Key,
                    Price          = ProductItem.Price,
                    Quantity       = int.Parse(entCount.Text),
                    ProductExpress = ProductItem.Express,
                    IsSchedule     = ProductItem.SchedulesList.Count > 0
                };
                /// Если мы изменяем размер товара в корзине
                if (oldBasket != null)
                {
                    if (oldBasket.SizeValueId != selectSize.Key || oldBasket.Quantity != basketBD.Quantity)
                    {
                        /// Не дает добавить товаров больше чем они есть на складе
                        if (basketBD.Quantity > maxCountProduct)
                        {
                            basketBD.Quantity = maxCountProduct;
                        }
                        BasketDB.Update(basketBD, oldBasket.ProductID, oldBasket.SizeValueId ?? 0);
                    }
                    OnePage.redirectApp.BackToHistory();
                    return;
                }
                else
                {
                    BasketDB basketProfile;
                    if (basketBD.SizeID == 0)
                    {
                        basketProfile = BasketDB.GetItemByID(basketBD.ProductID);
                    }
                    else
                    {
                        basketProfile = BasketDB.GetItem(basketBD.ProductID, basketBD.SizeID);
                    }

                    if (basketProfile != null)
                    {
                        /// Не дает добавить товаров больше чем они есть на складе
                        if (basketBD.Quantity + basketProfile.Quantity > maxCountProduct)
                        {
                            basketBD.Quantity = maxCountProduct - basketProfile.Quantity;
                        }
                    }
                    BasketDB.AddCount(basketBD);
                }
            }
            else                 /// Если залогинен
            {
                Basket basket = new Basket {
                    ProductID   = ProductItem.ProductsID,
                    SizeValueId = selectSize.Key,
                    Quantity    = int.Parse(entCount.Text)
                };
                /// Если мы изменяем размер товара в корзине
                if (oldBasket != null)
                {
                    if (oldBasket.SizeValueId != selectSize.Key || oldBasket.Quantity != basket.Quantity)
                    {
                        /// Удаляем позицию товара из заказа
                        oldBasket.Quantity = -oldBasket.Quantity;
                        try {
                            await Basket.PushToBasketAsync(oldBasket);
                        } catch (Exception) {
                            eventRefresh  = null;
                            eventRefresh += (obj, evn) => {
                                Button content = obj as Button;
                                content.IsEnabled = false;
                                AddToBasket(maxCountProduct).Wait();
                            };
                            Content = OnePage.mainPage.ShowMessageError(eventRefresh);
                            return;
                        }
                        /// Не дает добавить товаров больше чем они есть на складе
                        if (basket.Quantity > maxCountProduct)
                        {
                            basket.Quantity = maxCountProduct;
                        }
                        try {
                            await Basket.PushToBasketAsync(basket);
                        } catch (Exception) {
                            eventRefresh  = null;
                            eventRefresh += (obj, evn) => {
                                Button content = obj as Button;
                                content.IsEnabled = false;
                                AddToBasket(maxCountProduct).Wait();
                            };
                            Content = OnePage.mainPage.ShowMessageError(eventRefresh);
                            return;
                        }
                    }
                    OnePage.redirectApp.BackToHistory();
                    return;
                }
                else                     /// Если перешли в товар НЕ из корзины
                {
                    List <Basket> basketProfileList;
                    try {
                        basketProfileList = await Basket.GetProductInBasketAsync();
                    } catch (Exception) {
                        eventRefresh  = null;
                        eventRefresh += (obj, evn) => {
                            Button content = obj as Button;
                            content.IsEnabled = false;
                            AddToBasket(maxCountProduct).Wait();
                        };
                        Content = OnePage.mainPage.ShowMessageError(eventRefresh);
                        return;
                    }
                    Basket basketProfile;
                    if (basket.SizeValueId != null)
                    {
                        basketProfile = basketProfileList.SingleOrDefault(g => g.ProductID == basket.ProductID && g.SizeValueId == basket.SizeValueId);
                    }
                    else
                    {
                        basketProfile = basketProfileList.SingleOrDefault(g => g.ProductID == basket.ProductID);
                    }

                    if (basketProfile != null)
                    {
                        /// Не дает добавить товаров больше чем они есть на складе
                        if (basket.Quantity + basketProfile.Quantity > maxCountProduct)
                        {
                            basket.Quantity = maxCountProduct - basketProfile.Quantity;
                        }
                    }
                    try {
                        await Basket.PushToBasketAsync(basket);
                    } catch (Exception) {
                        eventRefresh  = null;
                        eventRefresh += (obj, evn) => {
                            Button content = obj as Button;
                            content.IsEnabled = false;
                            AddToBasket(maxCountProduct).Wait();
                        };
                        Content = OnePage.mainPage.ShowMessageError(eventRefresh);
                        return;
                    }
                }
            }
        }