private async Task OnAddProductsInOrderCommandExecuteAsync()
        {
            var productRepository = new AddProductInOrderRepository(new Product(), 1);
            var typeFactory       = this.GetTypeFactory();
            var viewModel         = typeFactory.CreateInstanceWithParametersAndAutoCompletion <OrderProductsAddWindowViewModel>(productRepository);

            if (await _uiVisualizerService.ShowDialogAsync(viewModel) ?? false)
            {
                using (SqlConnection connection = new SqlConnection(AppConfig.ConnectionString)) {
                    connection.Open();

                    //Количество добавляемого товара в данном заказе
                    var cmd = new SqlCommand($"SELECT COUNT(*) FROM order_product WHERE order_id = @order_id AND product_id = @product_id", connection);
                    cmd.Parameters.AddRange(new[] {
                        new SqlParameter("@order_id", Order.Id),
                        new SqlParameter("@product_id", productRepository.Product.Id),
                    });

                    int count = cmd.ExecuteScalar() == null ? 0 : (int)cmd.ExecuteScalar();

                    //Создаём команду на добавление и выполняем столько раз, сколько нужно
                    for (int i = 0; i < productRepository.ProductCount; i++)
                    {
                        cmd = new SqlCommand($"INSERT INTO order_product (order_id, product_id) VALUES (@order_id, @product_id)", connection);
                        cmd.Parameters.AddRange(new[] {
                            new SqlParameter("@order_id", Order.Id),
                            new SqlParameter("@product_id", productRepository.Product.Id),
                        });

                        cmd.ExecuteNonQuery();
                    }

                    //Если товар добавляется в первый раз - добавляем в таблицу, иначе увеличиваем количество в таблице
                    if (count == 0)
                    {
                        productRepository.Product.Count = productRepository.ProductCount;
                        Order.Products.Add(productRepository.Product);
                    }
                    else
                    {
                        Order.Products.Single((p) => p.Id == productRepository.Product.Id).Count = productRepository.ProductCount + count;
                    }

                    Order.UpdatedAt = DateTime.Now;
                    Trace.WriteLine("Успешное добавление товара в заказ!");
                }
            }
        }
Esempio n. 2
0
 public OrderProductsAddWindowViewModel(AddProductInOrderRepository productRepository)
 {
     ProductRepository = productRepository;
     Products          = Product.Available();
 }