/// <summary> /// Insere um novo produto ou atualiza caso ele já exista. /// </summary> /// <param name="product">Produto a ser inserido ou atualizado</param> public void InsertUpdateProduct(Product product) { try { using (this.productDataAccess = new ProductDataAccess()) { if (product.Id > 0) { this.productDataAccess.UpdateProduct(product.Id, product.BarCode, product.Name, product.Description, product.MeasurementUnit, product.Status); } else { this.productDataAccess.InsertProduct(product.BarCode, product.Name, product.Description, product.MeasurementUnit, product.StockQuantity, product.Status); } this.productDataAccess.InsertPrice(this.productDataAccess.GetId(product.BarCode), DateTime.Now, product.CostPrice, product.SalePrice); } } catch (Exception ex) { Logging.Error(BusinessConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); throw ex; } }
/// <summary> /// Lança evento para adicionar produto. /// </summary> /// <param name="product">Produto que será adicionado</param> public void ThrowAddProduct(Product product) { AddProductEventHandler handler = AddProduct; if (handler != null) { AddProduct(product); } }
/// <summary> /// Atualiza a quantidade em estoque de um produto. /// </summary> /// <param name="product">Produto a ser atualizado</param> public void UpdateProductStockQuantity(Product product) { try { using (this.productDataAccess = new ProductDataAccess()) { this.productDataAccess.UpdateProductStockQuantity(product.BarCode, product.StockQuantity); } } catch (Exception ex) { Logging.Error(BusinessConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); throw ex; } }
/// <summary> /// Adiciona um produto na lista de produtos da mesa selecionada. /// </summary> /// <param name="tableIndex">Índice da mesa</param> private void AddProduct(int tableIndex) { int productIndex; try { this.currentProduct = this.productBusiness.GetProductSale(long.Parse(this.textBoxBarCode.Text)); if (this.currentProduct != null) { this.currentProduct.Quantity = int.Parse(textBoxQuantity.Text); // Se a quantidade a ser vendida for maior que a quantidade em estoque, exibe um alerta. if (this.currentProduct.Quantity + GetProductQuantity(this.currentProduct) <= this.currentProduct.StockQuantity) { // Busca o índice deste produto na lista de produtos. productIndex = GetProductIndex(tableIndex, this.currentProduct); // Se o índice do produto for maior que 0 ele já está na lista, caso contrário ele será adicionado. if (productIndex > -1) { this.currentProduct.Quantity += this.lstTables[tableIndex].LstProducts[productIndex].Quantity; this.lstTables[tableIndex].LstProducts[productIndex] = this.currentProduct; this.listBoxProducts.Items[productIndex + 1] = this.currentProduct; this.listBoxProducts.SelectedIndex = productIndex + 1; } else { this.lstTables[tableIndex].LstProducts.Add(this.currentProduct); this.listBoxProducts.Items.Add(this.currentProduct); this.listBoxProducts.SelectedIndex = this.listBoxProducts.Items.Count - 1; } } else { MessageBox.Show(this, Resources.StockProductNotEnough, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show(this, Resources.ProductNotExists, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); } UpdateTablesStatus(); } catch (Exception ex) { Logging.Error(ViewConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); } }
/// <summary> /// Busca a quantidade de um produto em todas em mesas. /// </summary> /// <param name="prod">Produto a ser buscado</param> /// <returns>Retorna a quantidade do produto em todas as mesas</returns> private int GetProductQuantity(Product prod) { int count = 0; try { foreach (Table table in this.lstTables) { foreach (Product product in table.LstProducts) { if (product.Id == prod.Id) { count += product.Quantity; } } } return count; } catch (Exception ex) { throw ex; } }
/// <summary> /// Busca o índice de um produto na lista de produtos de determinada mesa. /// </summary> /// <param name="tableIndex">Índice da mesa</param> /// <param name="product">Produto a ser buscado</param> /// <returns>Retorna o índice do produto na lista de produtos da mesa selecionada</returns> private int GetProductIndex(int tableIndex, Product product) { try { for (int i = 0; i < this.lstTables[tableIndex].LstProducts.Count; i++) { if (this.lstTables[tableIndex].LstProducts[i].Id == product.Id) { return i; } } return -1; } catch (Exception ex) { throw ex; } }
private void frmAddProduct_AddProduct(Product product) { this.textBoxBarCode.Text = product.BarCode.ToString(); AddProduct(this.currentTable.Number - 1); CountItemsAndCalculateSubtotal(this.currentTable.Number - 1); this.textBoxBarCode.Text = string.Empty; this.textBoxBarCode.Focus(); }
/// <summary> /// Adiciona um produto na lista de produtos a serem vendidos. /// </summary> private void AddProduct() { int productIndex; try { // Busca o produto a ser adicionado. this.currentProduct = this.productBusiness.GetProductSale(long.Parse(this.textBoxBarCode.Text)); if (this.currentProduct != null) { this.currentProduct.Quantity = int.Parse(textBoxQuantity.Text); // Se a quantidade a ser vendida for maior que a quantidade em estoque, exibe um alerta. if (this.currentProduct.Quantity + GetProductQuantity(this.currentProduct) <= this.currentProduct.StockQuantity) { // Busca o índice deste produto na lista de produtos. productIndex = GetProductIndex(this.currentProduct); // Se o índice do produto for maior que 0 ele já está na lista, caso contrário ele será adicionado. if (productIndex > -1) { this.currentProduct.Quantity += this.lstProduct[productIndex].Quantity; this.lstProduct[productIndex] = this.currentProduct; // Associa o produto no listbox. this.listBoxProducts.Items[productIndex + 1] = this.currentProduct; // Seleciona o item do listbox. this.listBoxProducts.SelectedIndex = productIndex + 1; } else { this.lstProduct.Add(this.currentProduct); this.listBoxProducts.Items.Add(this.currentProduct); this.listBoxProducts.SelectedIndex = this.listBoxProducts.Items.Count - 1; } // Informa nome, preço e subtotal deste produto. this.textBoxName.Text = this.currentProduct.Name; this.textBoxPrice.Text = this.currentProduct.SalePrice.ToString("0.00"); this.textBoxSubtotal.Text = this.currentProduct.CalculateSubtotal().ToString("0.00"); } else { MessageBox.Show(this, Resources.StockProductNotEnough, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } else { MessageBox.Show(this, Resources.ProductNotExists, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception ex) { Logging.Error(ViewConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); } }
/// <summary> /// Busca a quantidade de um produto na lista de produtos. /// </summary> /// <param name="prod">Produto a ser buscado</param> /// <returns>Retorna a quantidade do produto na lista</returns> private int GetProductQuantity(Product prod) { try { foreach(Product product in this.lstProduct) { if (product.Id == prod.Id) { return product.Quantity; } } return 0; } catch (Exception ex) { throw ex; } }
/// <summary> /// Busca o índice de um produto na lista de produtos. /// </summary> /// <param name="product">Produto a ser buscado</param> /// <returns>Retorna o índice do produto na lista</returns> private int GetProductIndex(Product product) { try { for (int i = 0; i < this.lstProduct.Count; i++) { if (this.lstProduct[i].Id == product.Id) { return i; } } return -1; } catch (Exception ex) { throw ex; } }
private void buttonAddProduct_Click(object sender, EventArgs e) { // Verifica se algum produto foi selecionado. if (this.dataGridViewProducts.SelectedRows.Count > 0) { Product product = new Product(); product.Id = int.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[0].Value.ToString()); product.BarCode = long.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[1].Value.ToString()); product.Name = this.dataGridViewProducts.SelectedRows[0].Cells[2].Value.ToString(); product.Description = this.dataGridViewProducts.SelectedRows[0].Cells[3].Value.ToString(); product.MeasurementUnit = this.dataGridViewProducts.SelectedRows[0].Cells[4].Value.ToString(); product.CostPrice = float.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[5].Value.ToString()); product.SalePrice = float.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[6].Value.ToString()); // Lança evento para ser capturado no FormSale ou no FormTables. ThrowAddProduct(product); this.Close(); } else { // MessageBox. } }
/// <summary> /// Salva os dados do produto. /// </summary> private void SaveProduct() { try { // Verifica se os campos do formulário não estão vazios. if (string.IsNullOrWhiteSpace(this.textBoxBarCode.Text) || string.IsNullOrWhiteSpace(this.textBoxName.Text) || string.IsNullOrWhiteSpace(this.textBoxDescription.Text) || string.IsNullOrWhiteSpace(this.comboBoxMeasurementUnity.SelectedItem.ToString()) || string.IsNullOrWhiteSpace(this.textBoxCostPrice.Text) || string.IsNullOrWhiteSpace(this.textBoxSalePrice.Text)) { MessageBox.Show(this, Resources.ProductSaveEmptyFields, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } Product product = new Product(); if (this.dataGridViewProducts.SelectedRows.Count == 1) { product.Id = int.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[0].Value.ToString()); } product.BarCode = long.Parse(this.textBoxBarCode.Text); product.Name = this.textBoxName.Text; product.Description = this.textBoxDescription.Text; product.MeasurementUnit = this.comboBoxMeasurementUnity.SelectedItem.ToString(); product.StockQuantity = 0; product.Status = this.radioButtonActive.Checked ? 1 : 0; product.CostPrice = float.Parse(this.textBoxCostPrice.Text); product.SalePrice = float.Parse(this.textBoxSalePrice.Text); this.productBusiness.InsertUpdateProduct(product); MessageBox.Show(this, Resources.ProductSaveSuccess, Resources.Success, MessageBoxButtons.OK, MessageBoxIcon.Information); } catch (Exception ex) { Logging.Error(ViewConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); MessageBox.Show(this, Resources.ProductSaveError, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <summary> /// Salva a alterações realizadas nas quantidades dos produtos em estoque. /// </summary> private void SaveStock() { int currentQuantity; int additionalQuantity; try { Cursor.Current = Cursors.WaitCursor; Thread.Sleep(1000); if (this.dataGridViewProducts.SelectedRows.Count == 1) { // Quantidade atual do produto em estoque. currentQuantity = int.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[4].Value.ToString()); // Quantidade a ser adicionar ou retirada do estoque. additionalQuantity = int.Parse(textBoxQuantity.Text); Product product = new Product(); product.Id = int.Parse(this.dataGridViewProducts.SelectedRows[0].Cells[0].Value.ToString()); product.BarCode = long.Parse(this.textBoxBarCode.Text); product.Name = this.textBoxName.Text; product.Description = this.textBoxDescription.Text; if (this.radioButtonProductIn.Checked) { product.StockQuantity = currentQuantity + additionalQuantity; } else { // Se a quantidade a ser retirada for maior que a quantidade em estoque, exibe um alerta. if (additionalQuantity > currentQuantity) { MessageBox.Show(this, Resources.StockProductNotEnough, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; } else { product.StockQuantity = currentQuantity - additionalQuantity; } } this.productBusiness.UpdateProductStockQuantity(product); MessageBox.Show(this, Resources.StockSaveSucess, Resources.Success, MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show(this, Resources.StockProductNotSelected, Resources.Warning, MessageBoxButtons.OK, MessageBoxIcon.Warning); } } catch (Exception ex) { Logging.Error(ViewConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); MessageBox.Show(this, Resources.StockSaveError, Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Error); } finally { Cursor.Current = Cursors.Default; } }
/// <summary> /// Busca produto a ser adicionado na venda pelo código de barras. /// </summary> /// <param name="barCode">Código de barras do produto</param> /// <returns>Retorna o produto</returns> public Product GetProductSale(long barCode) { DataTable dtProduct; Product product = null; try { using (this.productDataAccess = new ProductDataAccess()) { dtProduct = this.productDataAccess.GetProductSale(barCode); } if (dtProduct != null && dtProduct.Rows.Count == 1) { product = new Product(); product.Id = (int)dtProduct.Rows[0][DatabaseConstants.ProductIdColumn]; product.BarCode = (long)dtProduct.Rows[0][DatabaseConstants.ProductBarCodeColumn]; product.Name = (string)dtProduct.Rows[0][DatabaseConstants.ProductNameColumn]; product.Description = (string)dtProduct.Rows[0][DatabaseConstants.ProductDescriptionColumn]; product.MeasurementUnit = (string)dtProduct.Rows[0][DatabaseConstants.ProductMeasurementUnitColumn]; product.StockQuantity = (double)dtProduct.Rows[0][DatabaseConstants.ProductStockQuantityColumn]; product.CostPrice = float.Parse(dtProduct.Rows[0][DatabaseConstants.PriceCostPriceColumn].ToString()); product.SalePrice = float.Parse(dtProduct.Rows[0][DatabaseConstants.PriceSalePriceColumn].ToString()); } return product; } catch (Exception ex) { Logging.Error(BusinessConstants.ProjectName, MethodBase.GetCurrentMethod().DeclaringType.Name, MethodBase.GetCurrentMethod().Name, ex.Message); throw ex; } }