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("Успешное добавление товара в заказ!"); } } }
public OrderProductsAddWindowViewModel(AddProductInOrderRepository productRepository) { ProductRepository = productRepository; Products = Product.Available(); }