// Commit to database - new product private void saveNewProductInformationToDb() { //Save the product that was just created. Check whether the product saved correctly. int id = SqliteDAProduct.SaveProductAndGetId(this.product); if (id != 0) { DialogResult dialogResult = MessageBox.Show("New product created successfully", "New Product", MessageBoxButtons.OK, MessageBoxIcon.Information); if (dialogResult == DialogResult.OK) { //Set the product id variable equal to the product id saved to the database. The forms product id can be accessed by other forms that need it. this.product.Id = id; if (barcodeComboBox.Text != "") { BarcodeModel barcode = new BarcodeModel(); barcode.Barcode = barcodeComboBox.Text; barcode.ProductId = id; SqliteDataAccessBarcode.SaveBarcode(barcode); } this.Close(); } } else if (id == 0) { MessageBox.Show("Something went wrong. New product could not be saved.\nCheck the error log for more information.", "New Product Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
// 3. Product private void productPictureBox_DoubleClick(object sender, EventArgs e) { //Load all products from the database to the main data grid view. modeStripStatusLabel.Text = "PRODUCT MODE"; mainDataGridView.DataSource = SqliteDAProduct.GetAllProducts(); SetDefaultLoadParameters(); mainDataGridView.Columns["Id"].Visible = false; mainDataGridView.Columns["ProductLinkId"].Visible = false; searchButton.Enabled = true; }
// 2. Existing Product Initialize // Initiated when the user clicks edit on the main ui and passes a product to edit. public ProductNewOrEdit(int productId) { InitializeComponent(); formTitleLabel.Text = "Edit Product"; saveButton.Text = "Edit"; this.existingProduct = SqliteDAProduct.GetProductById(productId); isNewProduct = false; addBarcodeButton.Enabled = true; deleteBarcodeButton.Enabled = true; }
// 2. Existing Invoice Product Initialize public InvoiceProductNewOrEdit(int invoiceProductId) { InitializeComponent(); this.existingInvoiceProduct = SqliteDAInvoiceProduct.GetInvoiceProductById(invoiceProductId); // Required to display the product information on the form when editing an invoice product. this.product = SqliteDAProduct.GetProductById(this.existingInvoiceProduct.ProductId); this.invoiceId = this.existingInvoiceProduct.InvoiceId; formTitleLabel.Text = "Edit Invoice Product"; saveButton.Text = "Edit"; this.newInvoiceProduct = false; }
//********************************************************************************************// // SAVE MODELS - BARCODE PANEL CONTROLS //********************************************************************************************// // SAVE MODELS - BARCODE PRESS ENTER IN TEXT BOX EVENT // Add invoice products to the invoice by either searching for the product by barcode, // or by using the product search form. private void barcodeTextBox_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Enter) { ProductModel product = new ProductModel(); //1. Does the user have a barcode to scan or type in? //1.1 NO - Press Enter on empty text box if (barcodeTextBox.Text == "") { //Get back a product from the product search form. //If product search form is closed without selecting a product, e.g. closing the form //Then exit process and wait for the user to type/scan a barcode or try to search again. product = searchForProduct(); } //1.2 YES - Enter barcode and press enter to search for product else { //Search for product with barcode provided by the user product = SqliteDAProduct.GetProductByBarcode(barcodeTextBox.Text); //2. Did the search return a product that matches the barcode? //NO? if (product == null) { DialogResult result = MessageBox.Show("Barcode not found.\nAdd it to a new or existing product.", "Barcode Not Found", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); if (result == DialogResult.OK) { product = searchForProduct(); } } } //Find Full Product Details with product Id //Check whether the user selected a product in the product search form if (product.Id != 0) { product = SqliteDAProduct.GetProductById(product.Id); //Add Invoice Product Details InvoiceProductNewOrEdit invoiceProductForm = new InvoiceProductNewOrEdit(product, Convert.ToInt32(invoiceNumberStripStatusLabel.Text)); invoiceProductForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAInvoiceProduct.GetAllInvoiceProductsByInvoiceId(Convert.ToInt32(invoiceNumberStripStatusLabel.Text)); mainDataGridView.AutoResizeColumns(); mainDataGridView.ClearSelection(); barCodeSearchPanel.Visible = true; mainDataGridView.Columns["ProductId"].Visible = false; mainDataGridView.Columns["InvoiceId"].Visible = false; calculateInvoiceTotals(SqliteDAInvoice.GetInvoiceById(Convert.ToInt32(invoiceNumberStripStatusLabel.Text))); barcodeTextBox.ResetText(); this.ActiveControl = barcodeTextBox; } } }
//********************************************************************************************// // SAVE MODELS - CLICK NEW BUTTON EVENT //********************************************************************************************// // There is just one click new button event method. Check in which mode the app is in to // determine which class to act on. private void newButton_Click(object sender, EventArgs e) { //1. Category if (modeStripStatusLabel.Text == "CATEGORY MODE") { CategoryNewOrEdit categoryForm = new CategoryNewOrEdit(); categoryForm.ShowDialog(); mainDataGridView.DataSource = SqliteDACategory.GetAllCategories(); SetDefaultLoadParameters(); } //2. Store else if (modeStripStatusLabel.Text == "STORE MODE") { StoreNewOrEdit storeForm = new StoreNewOrEdit(); storeForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAStore.GetAllStores(); SetDefaultLoadParameters(); } //3. Product Link else if (modeStripStatusLabel.Text == "PRODUCT LINK MODE") { ProductLinkNewOrEdit productLinkForm = new ProductLinkNewOrEdit(); productLinkForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAProductLink.GetAllProductLinks(); SetDefaultLoadParameters(); } //4. Product else if (modeStripStatusLabel.Text == "PRODUCT MODE") { ProductNewOrEdit productForm = new ProductNewOrEdit(); productForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAProduct.GetAllProducts(); SetDefaultLoadParameters(); } //5. Invoice else if (modeStripStatusLabel.Text == "INVOICE MODE") { InvoiceNewOrEdit invoiceForm = new InvoiceNewOrEdit(); invoiceForm.ShowDialog(); // Check if user clicked the save button. // TODO: What happens if the user doesn't click the save button in the next form? if (invoiceForm.userClickedSaveButton) { SetDefaultLoadParametersForInvoiceBarcodeMode(invoiceForm.invoice); } } }
// Commit to databse - existing product private void saveExistingProductInformationToDb() { if (SqliteDAProduct.UpdateProductById(product)) { DialogResult dialogResult = MessageBox.Show("Product updated successfully.", "Edit Product", MessageBoxButtons.OK, MessageBoxIcon.Information); if (dialogResult == DialogResult.OK) { this.Close(); } } else { MessageBox.Show("Something went wrong. Product could not be updated.\nCheck the error log for more information.", "Edit Product Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
// Search for all products based on the parameters set by the user private void SearchForProducts() { SetProductInformation(); this.products = SqliteDAProduct.GetAllProducts(this.product); if (mode == "INVOICE PRODUCT MODE") { PopulateDGVWithSearchResults(); this.ActiveControl = productSearchDataGridView; if (this.products.Count > 0) { productSearchDataGridView.Rows[0].Selected = true; addProductToInvoiceButton.Enabled = true; } } else if (mode == "PRODUCT MODE") { this.Close(); } }
//********************************************************************************************// // DELETE MODELS - CLICK DELETE BUTTON EVENT //********************************************************************************************// private void deleteButton_Click(object sender, EventArgs e) { //1. Category if (modeStripStatusLabel.Text == "CATEGORY MODE") { DialogResult dialogResult = MessageBox.Show(string.Format("Are you sure you want to delete this category?" + "\nCategory Name: {0}\nMain Category: {1}", row.Cells["Name"].Value.ToString(), row.Cells["MainCategory"].Value.ToString()), "Delete Category", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { bool result = SqliteDACategory.DeleteCategoryById(Convert.ToInt32(row.Cells["Id"].Value)); if (result == true) { DialogResult dialog = MessageBox.Show("Category was successfully deleted.", "Delete Category", MessageBoxButtons.OK, MessageBoxIcon.Information); mainDataGridView.DataSource = SqliteDACategory.GetAllCategories(); mainDataGridView.AutoResizeColumns(); toggleClickFirstButtons(false); } else { DialogResult dialog = MessageBox.Show("Something went wrong. Category could not be deleted.", "Delete Category Error", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (dialogResult == DialogResult.No) { toggleClickFirstButtons(false); } } //2. Store else if (modeStripStatusLabel.Text == "STORE MODE") { DialogResult dialogResult = MessageBox.Show(string.Format("Are you sure you want to delete this store?" + "\nStore Name: {0}\nLocation: {1}", row.Cells["Name"].Value.ToString(), row.Cells["Location"].Value.ToString()), "Delete Store", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { bool result = SqliteDAStore.DeleteStoreById(Convert.ToInt32(row.Cells["Id"].Value)); if (result == true) { DialogResult dialog = MessageBox.Show("Store was successfully deleted.", "Delete Store", MessageBoxButtons.OK, MessageBoxIcon.Information); mainDataGridView.DataSource = SqliteDAStore.GetAllStores(); mainDataGridView.AutoResizeColumns(); toggleClickFirstButtons(false); } else { DialogResult dialog = MessageBox.Show("Something went wrong. Store could not be deleted.", "Delete Store Error", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (dialogResult == DialogResult.No) { toggleClickFirstButtons(false); } } //3. Product Link else if (modeStripStatusLabel.Text == "PRODUCT LINK MODE") { DialogResult dialogResult = MessageBox.Show(string.Format("Are you sure you want to delete this product link?" + "\nProduct Link Name: {0}\nCategory Name: {1}", row.Cells["Name"].Value.ToString(), row.Cells["CategoryName"].Value.ToString()), "Delete Product Link", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { bool result = SqliteDAProductLink.DeleteProductLinkById(Convert.ToInt32(row.Cells["Id"].Value)); if (result == true) { DialogResult dialog = MessageBox.Show("Product Link was successfully deleted.", "Delete Product Link", MessageBoxButtons.OK, MessageBoxIcon.Information); mainDataGridView.DataSource = SqliteDAProductLink.GetAllProductLinks(); mainDataGridView.AutoResizeColumns(); toggleClickFirstButtons(false); } else { DialogResult dialog = MessageBox.Show("Something went wrong. Product Link could not be deleted.", "Delete Product Link Error", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (dialogResult == DialogResult.No) { toggleClickFirstButtons(false); } } //4. Product else if (modeStripStatusLabel.Text == "PRODUCT MODE") { DialogResult dialogResult = MessageBox.Show(string.Format("Are you sure you want to delete this product?" + "\nBrand Name: {0}\nProduct Description: {1}", row.Cells["BrandName"].Value.ToString(), row.Cells["Description"].Value.ToString()), "Delete Product", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { bool result = SqliteDAProduct.DeleteProductById(Convert.ToInt32(row.Cells["Id"].Value)); if (result == true) { DialogResult dialog = MessageBox.Show("Product was successfully deleted.", "Delete Product", MessageBoxButtons.OK, MessageBoxIcon.Information); mainDataGridView.DataSource = SqliteDAProduct.GetAllProducts(); mainDataGridView.AutoResizeColumns(); toggleClickFirstButtons(false); } else { DialogResult dialog = MessageBox.Show("Something went wrong. Product could not be deleted.", "Delete Product Error", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (dialogResult == DialogResult.No) { toggleClickFirstButtons(false); } } //5. Invoice else if (modeStripStatusLabel.Text == "INVOICE MODE") { DialogResult dialogResult = MessageBox.Show(string.Format("Are you sure you want to delete this invoice?" + "\nInvoice Date: {0}\nInvoice Number: {1}", row.Cells["Date"].Value.ToString(), row.Cells["InvoiceNumber"].Value.ToString()), "Delete Invoice", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { bool result = false; if (row.Cells["Saved"].Value.ToString() == "Open") { //Invoices marked as open will be permanently deleted from the database result = SqliteDAInvoice.DeleteOpenInvoiceById(Convert.ToInt32(row.Cells["Id"].Value)); } else if (row.Cells["Saved"].Value.ToString() == "Saved") { //Invoices marked as saved will be archived (marked as deleted, but still kept in the database). result = SqliteDAInvoice.DeleteSavedInvoiceById(Convert.ToInt32(row.Cells["Id"].Value)); } if (result == true) { DialogResult dialog = MessageBox.Show("Invoice was successfully deleted.", "Delete Invoice", MessageBoxButtons.OK, MessageBoxIcon.Information); mainDataGridView.DataSource = SqliteDAInvoice.GetAllInvoices(); mainDataGridView.AutoResizeColumns(); toggleClickFirstButtons(false); } else { DialogResult dialog = MessageBox.Show("Something went wrong. Invoice could not be deleted.", "Delete Invoice Error", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (dialogResult == DialogResult.No) { toggleClickFirstButtons(false); } } //6. Invoice Product else if (modeStripStatusLabel.Text == "INVOICE PRODUCT MODE") { DialogResult dialogResult = MessageBox.Show(string.Format("Are you sure you want to delete this product from the invoice?" + "\nProduct Name: {0}", row.Cells["ProductName"].Value.ToString()), "Delete Invoice Product", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Warning); if (dialogResult == DialogResult.Yes) { bool result = SqliteDAInvoiceProduct.DeleteInvoiceProductById(Convert.ToInt32(row.Cells["Id"].Value)); if (result == true) { DialogResult dialog = MessageBox.Show("Product was successfully deleted from invoice.", "Delete Invoice Product", MessageBoxButtons.OK, MessageBoxIcon.Information); mainDataGridView.DataSource = SqliteDAInvoiceProduct.GetAllInvoiceProductsByInvoiceId(Convert.ToInt32(invoiceNumberStripStatusLabel.Text)); mainDataGridView.AutoResizeColumns(); mainDataGridView.Columns["ProductId"].Visible = false; mainDataGridView.Columns["InvoiceId"].Visible = false; toggleClickFirstButtons(false); } else { DialogResult dialog = MessageBox.Show("Something went wrong. Product could not be deleted from invoice.", "Delete Invoice Product Error", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else if (dialogResult == DialogResult.No) { toggleClickFirstButtons(false); } } }
//********************************************************************************************// // EDIT MODELS - CLICK EDIT BUTTON EVENT //********************************************************************************************// private void editButton_Click(object sender, EventArgs e) { // The user first has to select an item from the data grid view, click the edit button and // then the edit form for the respective object should open. // All the object properties are collected from the selected datagridview row and sent to // the edit form. There the user will edit the object properties and update the database. // The datagridview reloads and gets all objects and turns off the view/edit/delete buttons. // 1. Category if (modeStripStatusLabel.Text == "CATEGORY MODE") { //Create object int categoryId = Convert.ToInt32(row.Cells["Id"].Value); //Send to edit form CategoryNewOrEdit categoryForm = new CategoryNewOrEdit(categoryId); categoryForm.ShowDialog(); //Reload data grid view mainDataGridView.DataSource = SqliteDACategory.GetAllCategories(); SetDefaultLoadParameters(); } // 2. Store else if (modeStripStatusLabel.Text == "STORE MODE") { int storeId = Convert.ToInt32(row.Cells["Id"].Value); StoreNewOrEdit storeForm = new StoreNewOrEdit(storeId); storeForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAStore.GetAllStores(); SetDefaultLoadParameters(); } // 3. Product Link else if (modeStripStatusLabel.Text == "PRODUCT LINK MODE") { int productLinkId = Convert.ToInt32(row.Cells["Id"].Value); ProductLinkNewOrEdit productLinkForm = new ProductLinkNewOrEdit(productLinkId); productLinkForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAProductLink.GetAllProductLinks(); SetDefaultLoadParameters(); } // 4. Product else if (modeStripStatusLabel.Text == "PRODUCT MODE") { int productId = Convert.ToInt32(row.Cells["Id"].Value); ProductNewOrEdit productForm = new ProductNewOrEdit(productId); productForm.ShowDialog(); mainDataGridView.DataSource = SqliteDAProduct.GetAllProducts(); SetDefaultLoadParameters(); } // 5. Invoice else if (modeStripStatusLabel.Text == "INVOICE MODE") { int invoiceId = Convert.ToInt32(row.Cells["Id"].Value); InvoiceNewOrEdit invoiceForm = new InvoiceNewOrEdit(invoiceId); invoiceForm.ShowDialog(); SetDefaultLoadParametersForInvoiceBarcodeMode(invoiceForm.invoice); } // 6. Invoice Product else if (modeStripStatusLabel.Text == "INVOICE PRODUCT MODE") { int invoiceProductId = Convert.ToInt32(row.Cells["Id"].Value); InvoiceProductNewOrEdit invoiceProductForm = new InvoiceProductNewOrEdit(invoiceProductId); invoiceProductForm.ShowDialog(); barCodeSearchPanel.Visible = true; this.ActiveControl = barcodeTextBox; mainDataGridView.DataSource = SqliteDAInvoiceProduct.GetAllInvoiceProductsByInvoiceId(Convert.ToInt32(invoiceNumberStripStatusLabel.Text)); mainDataGridView.AutoResizeColumns(); mainDataGridView.ClearSelection(); mainDataGridView.Columns["ProductId"].Visible = false; mainDataGridView.Columns["InvoiceId"].Visible = false; mainDataGridView.Columns["TotalPrice"].DefaultCellStyle.Format = "0.00##"; calculateInvoiceTotals(SqliteDAInvoice.GetInvoiceById(Convert.ToInt32(invoiceNumberStripStatusLabel.Text))); } }