Beispiel #1
0
        private async void Remove()
        {
            var  category  = SelectedCategoryInTree;
            bool hasChilds = category.AllProducts.Count > 0 ||
                             Db.Categories.ProductAndCategories.Any(x => x.CategoryId == category.Model.Id);

            if (hasChilds || category.ChildCategories.Count > 0)
            {
                var result = await
                             View.MessageBox.ShowAsync(
                    $"Вы действительно хотите удалить категорию \"{category.Title}\" вместе со всем содержимым?",
                    "Удаление",
                    MessageBoxButton.OKCancel, MessageBoxImage.Question).ConfigureAwait(false);

                if (result != MessageBoxResult.OK)
                {
                    return;
                }
            }

            await AsyncHelper.ExecuteAtUI(() =>
            {
                category.ParentCollection.Remove(category);
                CloseChildCategories(category);
                CloseCategory(category, EventArgs.Empty);
            }).ConfigureAwait(false);

            await Db.Categories.DeleteAsync(category.Model).ConfigureAwait(false);
        }
Beispiel #2
0
        private async Task AddToResultsAsync(IEnumerable <Product> newProducts)
        {
            var goodProducts = new List <ProductVM>();

            lock (Products)
            {
                foreach (var newProduct in newProducts)
                {
                    _cts.Token.ThrowIfCancellationRequested();

                    bool isProductExist = Products.Any(x => x.Model.Id == newProduct.Id);
                    if (!isProductExist)
                    {
                        goodProducts.Add(new ProductVM(newProduct));
                    }
                }
            }

            await AsyncHelper.ExecuteAtUI(() =>
            {
                lock (Products)
                {
                    Products.AddRange(goodProducts);
                }
            }).ConfigureAwait(false);
        }
Beispiel #3
0
        public static async Task <MessageBoxResult> ShowAsync(string message, string caption,
                                                              MessageBoxButton buttons, MessageBoxImage image = MessageBoxImage.None)
        {
            var result = MessageBoxResult.None;
            await AsyncHelper.ExecuteAtUI(() =>
            {
                result = Show(message, caption, buttons, image);
            }).ConfigureAwait(false);

            return(result);
        }
Beispiel #4
0
        private async Task SearchStartAsync()
        {
            if (!IsStarted)
            {
                CurrentSubchapterNumber = 0;
                CurrentSubchapterTitle  = null;
                Status = null;
                ProductProcessingStatus = null;
                IsStarted = true;

                await AsyncHelper.RedirectToThreadPool();

                var isClearLastResult = await IsNeedClearLastResultAsync().ConfigureAwait(false);

                if (isClearLastResult == true)
                {
                    await AsyncHelper.ExecuteAtUI(() => Products.Clear()).ConfigureAwait(false);
                }
                else if (isClearLastResult is null)
                {
                    IsStarted = false;
                    return;
                }

                try
                {
                    if (!await IsCookiesExistsAsync().ConfigureAwait(false))
                    {
                        IsStarted = false;
                        return;
                    }

                    _cts = new CancellationTokenSource();

                    if (IsLocalSearch)
                    {
                        await GetProductsFromDbAsync().ConfigureAwait(false);
                    }
                    else
                    {
                        await GetProductsAsync().ConfigureAwait(false);
                    }
                    IsStarted = false;
                }
                catch (OperationCanceledException)
                {
                }
            }
            else
            {
                IsStarted = false;
                _cts.Cancel();
            }
        }
Beispiel #5
0
        private async void AddProductToCategoryFromSearch()
        {
            bool additionSuccess =
                await ShowAddProductToCategoryDialogAsync(SelectedProductsFromSearch, true).ConfigureAwait(false);

            if (additionSuccess && IsDeleteFromCurrentPlace)
            {
                var productsToDelete = SelectedProductsFromSearch.ToList();
                foreach (var productVm in productsToDelete)
                {
                    _tempSearchColl?.Remove(productVm);
                    await AsyncHelper.ExecuteAtUI(() => _searchColl.Remove(productVm)).ConfigureAwait(false);
                }
            }
        }
Beispiel #6
0
        private async void AddProductToCategoryHandler()
        {
            bool additionSuccess =
                await ShowAddProductToCategoryDialogAsync(ProductManager.SelectedProducts).ConfigureAwait(false);

            if (additionSuccess && IsDeleteFromCurrentPlace)
            {
                var productsToDelete = ProductManager.SelectedProducts.ToList();
                foreach (var productVm in productsToDelete)
                {
                    SelectedCategory.AllProducts.Remove(productVm);
                    await AsyncHelper.ExecuteAtUI(() => SelectedCategory.Products.Remove(productVm))
                    .ConfigureAwait(false);
                }
                await Db.Categories.DeleteProductsAsync(SelectedCategory.Model,
                                                        productsToDelete.Select(p => p.Model).ToList())
                .ConfigureAwait(false);
            }
        }
Beispiel #7
0
        private async void RemoveCategory()
        {
            foreach (var selectedCategory in SelectedCategories)
            {
                bool hasChilds = selectedCategory.AllProducts.Count > 0 || Db.Categories.ProductAndCategories.Any(x => x.CategoryId == selectedCategory.Model.Id);
                if (hasChilds || selectedCategory.ChildCategories.Count > 0)
                {
                    var result = await View.MessageBox.ShowAsync(
                        $"Вы действительно хотите удалить категорию \"{selectedCategory.Title}\" вместе со всем содержимым?",
                        "Удаление",
                        MessageBoxButton.OKCancel, MessageBoxImage.Question).ConfigureAwait(false);

                    if (result != MessageBoxResult.OK)
                    {
                        continue;
                    }
                }
                await AsyncHelper.ExecuteAtUI(() => selectedCategory.ParentCollection.Remove(selectedCategory))
                .ConfigureAwait(false);

                await Db.Categories.DeleteAsync(selectedCategory.Model).ConfigureAwait(false);
            }
        }
Beispiel #8
0
        public static async Task AddProductToCategoryAsync(CategoryVM category, IEnumerable <ProductVM> products)
        {
            await Db.Categories.AddProductsAsync(category.Model, products.Select(p => p.Model).ToList()).ConfigureAwait(false);

            foreach (var productVm in products)
            {
                if (category.AllProducts.Any(p => p.Model.Id == productVm.Model.Id))
                {
                    continue;
                }

                var isGoodProduct = true;
                if (category.IsFilterSetted)
                {
                    isGoodProduct = Filters.IsGoodProduct(productVm.Model, category.FiltersManagerVM.FiltersVM.Model);
                }
                if (isGoodProduct)
                {
                    await AsyncHelper.ExecuteAtUI(() => category.Products.Add(productVm)).ConfigureAwait(false);
                }
                category.AllProducts.Add(productVm);
            }
        }
Beispiel #9
0
        private async void LoadProducts(CategoryVM category)
        {
            if (category is null)
            {
                return;
            }

            category.IsLoading = true;
            await AsyncHelper.ExecuteAtUI(() => category.Products.Clear()).ConfigureAwait(false);

            var productsFromDb =
                await Db.Categories.GetAllProductsAsync(category.Model).ConfigureAwait(false);

            var productVmForDataGrid = new List <ProductVM>();

            foreach (var product in productsFromDb)
            {
                ProductVM productVm;
                if (!_allProducts.ContainsKey(product.Id))
                {
                    productVm = new ProductVM(product);
                    _allProducts.Add(product.Id, productVm);
                }
                else
                {
                    productVm = _allProducts[product.Id];
                }
                productVmForDataGrid.Add(productVm);
            }
            await AsyncHelper.ExecuteAtUI(() => category.Products.AddRange(productVmForDataGrid)).ConfigureAwait(false);

            category.AllProducts.Clear();
            category.AllProducts.AddRange(category.Products);

            category.IsLoading        = false;
            category.IsProductsLoaded = true;
        }