diff --git a/AdvertsingProfitControl/APCDatabase.accdb b/AdvertsingProfitControl/APCDatabase.accdb index be1a054..0553c54 100644 Binary files a/AdvertsingProfitControl/APCDatabase.accdb and b/AdvertsingProfitControl/APCDatabase.accdb differ diff --git a/AdvertsingProfitControl/AdvertsingProfitControl.csproj b/AdvertsingProfitControl/AdvertsingProfitControl.csproj index 4cb1db2..25301a2 100644 --- a/AdvertsingProfitControl/AdvertsingProfitControl.csproj +++ b/AdvertsingProfitControl/AdvertsingProfitControl.csproj @@ -128,6 +128,18 @@ DebugDatabaseConverter.cs + + Form + + + FrmManageAdItems.cs + + + Form + + + FrmManageSuppliers.cs + Form @@ -188,6 +200,12 @@ FrmLogConsole.cs + + FrmManageAdItems.cs + + + FrmManageSuppliers.cs + FrmRegisterAdSpecial.cs diff --git a/AdvertsingProfitControl/DebugDatabaseConverter.Designer.cs b/AdvertsingProfitControl/DebugDatabaseConverter.Designer.cs index 23d5744..5ccc135 100644 --- a/AdvertsingProfitControl/DebugDatabaseConverter.Designer.cs +++ b/AdvertsingProfitControl/DebugDatabaseConverter.Designer.cs @@ -83,7 +83,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(849, 827); + this.ClientSize = new System.Drawing.Size(701, 592); this.Controls.Add(this.convertButton); this.Controls.Add(this.moveOverButton); this.Controls.Add(this.datesToConvertListBox); diff --git a/AdvertsingProfitControl/DebugDatabaseConverter.cs b/AdvertsingProfitControl/DebugDatabaseConverter.cs index 92c7005..9ef96b0 100644 --- a/AdvertsingProfitControl/DebugDatabaseConverter.cs +++ b/AdvertsingProfitControl/DebugDatabaseConverter.cs @@ -1,15 +1,9 @@ using System; using System.Collections.Generic; -using System.ComponentModel; using System.Data; using System.Data.OleDb; -using System.Drawing; -using System.Globalization; using System.IO; using System.Linq; -using System.Runtime.InteropServices; -using System.Text; -using System.Threading.Tasks; using System.Transactions; using System.Windows.Forms; @@ -113,6 +107,18 @@ namespace AdvertsingProfitControl db.Suppliers.Add(temp); db.SaveChanges(); } + var adSpecials = GetAdSpecials(); + foreach (var adSpecial in adSpecials) + { + var db = new AdvertisingProfitControlModel(); + if(db.AdSpecials.Any(x => x.Name == adSpecial)) continue; + var tempAd = new AdSpecial + { + Name = adSpecial + }; + db.AdSpecials.Add(tempAd); + db.SaveChanges(); + } foreach (var date in datesToConvertListBox.Items) { var oldDateId = GetDateIdByDateString(date.ToString()); @@ -145,30 +151,7 @@ namespace AdvertsingProfitControl { db.WeekEndingDates.Add(date); } - //oleDbConnection.Open(); - //oleDbTransaction = oleDbConnection.BeginTransaction(); - //oleDbCommand.Transaction = oleDbTransaction; - ////Get the date ID for the date string - //oleDbCommand.CommandText = "INSERT INTO WeekEnding (EndOfWeekDate) VALUES (?)"; - //oleDbCommand.Parameters.AddWithValue("DateString", dateString); - //var rowsEffected = oleDbCommand.ExecuteNonQuery(); - //oleDbCommand.Parameters.Clear(); - //if (rowsEffected == 0) - //{ - // oleDbTransaction.Rollback(); - // MessageBox.Show(@"Failed on date"); - // return; - //} - //oleDbCommand.CommandText = "SELECT WeekEnding.ID FROM WeekEnding WHERE EndOfWeekDate = ?"; - //oleDbCommand.Parameters.AddWithValue("Date", dateString); - //var reader = oleDbCommand.ExecuteReader(); - //oleDbCommand.Parameters.Clear(); - //var dateId = 0; - //while (reader != null && reader.Read()) - //{ - // dateId = int.Parse(reader[0].ToString()); - //} - //reader?.Close(); + var adSpecialId = -1; for (var rowIndex = 0; rowIndex < projections.Rows.Count; rowIndex++) { var projectionedSale = new Projection(); @@ -197,34 +180,29 @@ namespace AdvertsingProfitControl projectionedSale.TotalProfitReturn = decimal.Parse(projections.Rows[rowIndex][6].ToString()); projectionedSale.FkAdItemId = db.AdItems.First(x => x.Id == adItemId).Id; projectionedSale.RowAttribute = int.Parse(projections.Rows[rowIndex][7].ToString()); - projectionedSale.FkAdSpecialId = (int) projections.Rows[rowIndex][8]; + + if ((int) projections.Rows[rowIndex][8] == 0 && adSpecialId == -1) + { + projectionedSale.FkAdSpecialId = null; + } + else + { + if ((int) (projections.Rows[rowIndex][8]) == 0) + { + projectionedSale.FkAdSpecialId = adSpecialId; + } + else + { + adSpecialId = (int) projections.Rows[rowIndex][8]; + projectionedSale.FkAdSpecialId = (int) projections.Rows[rowIndex][8]; + } + } projectionedSale.RowPosition = rowIndex + 1; projectionedSale.FkDateId = date.Id; db.Projections.Add(projectionedSale); - //Get the ID number of the ad item. - // //Get the ID number of the ad item. - // var adItemId = int.Parse(RetrieveAdItemId(projections.Rows[rowIndex][0].ToString())); - // //Get the group name of the ad special its in. - // adspecialId = GetAdSpecialId(int.Parse(projections.Rows[rowIndex][8].ToString())); - // oleDbCommand.CommandText = - // "INSERT INTO Projections (Sold, SalePrice, TotalSales, Cost, ProfitReturn, TotalProfitReturn, FK_AdItemID, RowAttribute, FK_AdSpecialGroupName, RowPosition, FK_DateID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; - // //SELECT AdItem.AdItem, APC.ProjectionSold, APC.ProjectionSalePrice, APC.ProjectionTotalSales, APC.ProjectionCost, APC.ProjectionProfitReturn, APC.ProjectionTotalProfitReturn, APC.RowAttribute, APC.FK_GroupID FROM (AdItem INNER JOIN APC ON AdItem.ID = APC.FK_AdItemID) WHERE FK_DateID = ? ORDER BY RowPosition ASC - // oleDbCommand.Parameters.AddWithValue("Sold", projections.Rows[rowIndex][1]); - // oleDbCommand.Parameters.AddWithValue("SalesPrice", projections.Rows[rowIndex][2]); - // oleDbCommand.Parameters.AddWithValue("TotalSales", projections.Rows[rowIndex][3]); - // oleDbCommand.Parameters.AddWithValue("Cost", projections.Rows[rowIndex][4]); - // oleDbCommand.Parameters.AddWithValue("ProfitReturn", projections.Rows[rowIndex][5]); - // oleDbCommand.Parameters.AddWithValue("TotalProfitReturn", projections.Rows[rowIndex][6]); - // oleDbCommand.Parameters.AddWithValue("adItemID", adItemId); - // oleDbCommand.Parameters.AddWithValue("RowAttribute", - // int.Parse(projections.Rows[rowIndex][7].ToString())); - // oleDbCommand.Parameters.AddWithValue("adSpecialID", adspecialId); - // oleDbCommand.Parameters.AddWithValue("RowPosition", (rowIndex + 1)); - // oleDbCommand.Parameters.AddWithValue("dateID", dateId); - // oleDbCommand.ExecuteNonQuery(); - // oleDbCommand.Parameters.Clear(); } //inventory + adSpecialId = -1; for (var i = 0; i < inventory.Rows.Count; i++) { var inventoryObject = new Inventory(); @@ -243,40 +221,39 @@ namespace AdvertsingProfitControl inventoryObject.EndingInventory = inventory.Rows[i][4].ToString(); inventoryObject.FkAdItemId = adItemId; inventoryObject.RowAttribute = int.Parse(inventory.Rows[i][5].ToString()); - inventoryObject.FkAdSpecialId = int.Parse(inventory.Rows[i][6].ToString()); + if ((int)inventory.Rows[i][6] == 0 && adSpecialId == -1) + { + inventoryObject.FkAdSpecialId = null; + } + else + { + if ((int)(inventory.Rows[i][6]) == 0) + { + inventoryObject.FkAdSpecialId = adSpecialId; + } + else + { + adSpecialId = (int)inventory.Rows[i][6]; + inventoryObject.FkAdSpecialId = (int)inventory.Rows[i][6]; + } + } inventoryObject.RowPosition = i + 1; inventoryObject.FkDateId = date.Id; db.Inventories.Add(inventoryObject); - // var adItemId = int.Parse(RetrieveAdItemId(inventory.Rows[i][0].ToString())); - // adspecialId = GetAdSpecialId(int.Parse(inventory.Rows[i][6].ToString())); - // oleDbCommand.CommandText = - // "INSERT INTO Inventory (BeginningInventory, Received, TotalInventory, EndingInventory, FK_AdItemID, RowAttribute, FK_AdSpecialGroupName, RowPosition, FK_DateID) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"; - // //"SELECT AdItem.AdItem, APC.BeginingInventory, APC.Received, APC.TotalInventory, APC.EndingInventory, APC.RowAttribute, APC.FK_GroupID FROM (AdItem INNER JOIN APC ON AdItem.ID = APC.FK_AdItemID) WHERE FK_DateID = ? ORDER BY RowPosition ASC" - // oleDbCommand.Parameters.AddWithValue("BeginningInventory", inventory.Rows[i][1].ToString()); - // oleDbCommand.Parameters.AddWithValue("Received", inventory.Rows[i][2].ToString()); - // oleDbCommand.Parameters.AddWithValue("TotalInventory", inventory.Rows[i][3].ToString()); - // oleDbCommand.Parameters.AddWithValue("EndingInventory", inventory.Rows[i][4].ToString()); - // oleDbCommand.Parameters.AddWithValue("AdItemID", adItemId); - // oleDbCommand.Parameters.AddWithValue("RowAttribute", int.Parse(inventory.Rows[i][5].ToString())); - // oleDbCommand.Parameters.AddWithValue("FK_AdSpecialGroup", adspecialId); - // oleDbCommand.Parameters.AddWithValue("RowPosition", (i + 1)); - // oleDbCommand.Parameters.AddWithValue("DateID", dateId); - // oleDbCommand.ExecuteNonQuery(); - // oleDbCommand.Parameters.Clear(); } //actual sales + adSpecialId = -1; for (var rowIndex = 0; rowIndex < actualSales.Rows.Count; rowIndex++) { var actualSale = new ActualSale(); //Get the ID number of the ad item. - AdItem adItem; var adItemId = 0; var spam = TextFormat.FormatAdItemText(actualSales.Rows[rowIndex][0].ToString()); if (db.AdItems.Any(x => x.Name == spam)) { //Exists - adItem = db.AdItems.First(x => x.Name == spam); + var adItem = db.AdItems.First(x => x.Name == spam); adItemId = adItem.Id; } //adspecialId = GetAdSpecialId(int.Parse(actualSales.Rows[rowIndex][8].ToString())); @@ -293,7 +270,22 @@ namespace AdvertsingProfitControl actualSale.TotalProfitReturn = decimal.Parse(actualSales.Rows[rowIndex][6].ToString()); actualSale.FkAdItemId = adItemId; actualSale.RowAttribute = int.Parse(actualSales.Rows[rowIndex][7].ToString()); - actualSale.FkAdSpecialId = (int) actualSales.Rows[rowIndex][8]; + if ((int)actualSales.Rows[rowIndex][8] == 0 && adSpecialId == -1) + { + actualSale.FkAdSpecialId = null; + } + else + { + if ((int)(projections.Rows[rowIndex][8]) == 0) + { + actualSale.FkAdSpecialId = adSpecialId; + } + else + { + adSpecialId = (int)actualSales.Rows[rowIndex][8]; + actualSale.FkAdSpecialId = (int)actualSales.Rows[rowIndex][8]; + } + } actualSale.RowPosition = rowIndex + 1; actualSale.FkDateId = date.Id; //db.WeekEndingDates.First(x => x.Id == dateId); //oleDbCommand.Parameters.AddWithValue("Sold", actualSales.Rows[rowIndex][1]); @@ -472,6 +464,30 @@ namespace AdvertsingProfitControl return adItems; } + public List GetAdSpecials() + { + var adItems = new List(); + var oleDbCommand = new OleDbCommand + { + CommandText = "SELECT AdSpecialName.AdSpecialName FROM AdSpecialName" + }; + var connection = new OleDbConnection(_connectionString); + oleDbCommand.Connection = connection; + using (connection) + { + using (oleDbCommand) + { + connection.Open(); + var reader = oleDbCommand.ExecuteReader(); + while (reader != null && reader.Read()) + { + adItems.Add(reader[0].ToString()); + } + } + } + return adItems; + } + public int GetSupplierId(string supplierName) { var supplier = new Supplier(); diff --git a/AdvertsingProfitControl/FrmMain.Designer.cs b/AdvertsingProfitControl/FrmMain.Designer.cs index 65d58dc..07fffd5 100644 --- a/AdvertsingProfitControl/FrmMain.Designer.cs +++ b/AdvertsingProfitControl/FrmMain.Designer.cs @@ -36,10 +36,14 @@ this.recordsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.addRecordsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.modifyRecordMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.reportsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.toolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.adSpecialKeyWordsToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.clearRecordToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.clearCurrentRecordSelectedDateToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.selectRangeToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.manageItemsToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); - this.clearSelectedDateToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.manageSuppliersToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.adSpecialKeyWordsToolsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.helpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.showHideConsoleHelpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.dbVersionHelpMainMenu = new System.Windows.Forms.ToolStripMenuItem(); @@ -104,7 +108,6 @@ this.grossProfitEstimatedWeeklyDeptmartmentExpenseLabel = new System.Windows.Forms.Label(); this.perfectGrossProfitLabel = new System.Windows.Forms.Label(); this.grossProfitDollarGrossProfitLabel = new System.Windows.Forms.Label(); - this.reportsMainMenu = new System.Windows.Forms.ToolStripMenuItem(); this.mainMenu.SuspendLayout(); this.mainTableLayoutPanel.SuspendLayout(); this.commentMainTableLayoutPanel.SuspendLayout(); @@ -186,46 +189,76 @@ this.addRecordsToolStripMenuItem.Name = "addRecordsToolStripMenuItem"; this.addRecordsToolStripMenuItem.Size = new System.Drawing.Size(323, 34); this.addRecordsToolStripMenuItem.Text = "&Add New Record"; - this.addRecordsToolStripMenuItem.Click += new System.EventHandler(this.addRecordToolStripMenuItem_Click); + this.addRecordsToolStripMenuItem.Click += new System.EventHandler(this.DisplayNewRecordForm); // // modifyRecordMainMenu // this.modifyRecordMainMenu.Name = "modifyRecordMainMenu"; this.modifyRecordMainMenu.Size = new System.Drawing.Size(323, 34); this.modifyRecordMainMenu.Text = "&Modify Existing Record "; - this.modifyRecordMainMenu.Click += new System.EventHandler(this.modifyRecordMainMenu_Click); + this.modifyRecordMainMenu.Click += new System.EventHandler(this.DisplayModifyRecordForm); + // + // reportsMainMenu + // + this.reportsMainMenu.Name = "reportsMainMenu"; + this.reportsMainMenu.Size = new System.Drawing.Size(95, 34); + this.reportsMainMenu.Text = "R&eports"; + this.reportsMainMenu.Visible = false; // // toolsMainMenu // this.toolsMainMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.clearSelectedDateToolsMainMenu, + this.clearRecordToolsMainMenu, this.manageItemsToolsMainMenu, + this.manageSuppliersToolsMainMenu, this.adSpecialKeyWordsToolsMainMenu}); this.toolsMainMenu.Name = "toolsMainMenu"; this.toolsMainMenu.Size = new System.Drawing.Size(72, 34); this.toolsMainMenu.Text = "&Tools"; // - // adSpecialKeyWordsToolsMainMenu + // clearRecordToolsMainMenu // - this.adSpecialKeyWordsToolsMainMenu.Name = "adSpecialKeyWordsToolsMainMenu"; - this.adSpecialKeyWordsToolsMainMenu.Size = new System.Drawing.Size(286, 34); - this.adSpecialKeyWordsToolsMainMenu.Text = "&Register Ad Special"; - this.adSpecialKeyWordsToolsMainMenu.Click += new System.EventHandler(this.adSpecialKeyWordsToolsMainMenu_Click); + this.clearRecordToolsMainMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.clearCurrentRecordSelectedDateToolsMainMenu, + this.selectRangeToolStripMenuItem}); + this.clearRecordToolsMainMenu.Name = "clearRecordToolsMainMenu"; + this.clearRecordToolsMainMenu.Size = new System.Drawing.Size(282, 34); + this.clearRecordToolsMainMenu.Text = "&Clear Record(s)"; + // + // clearCurrentRecordSelectedDateToolsMainMenu + // + this.clearCurrentRecordSelectedDateToolsMainMenu.Name = "clearCurrentRecordSelectedDateToolsMainMenu"; + this.clearCurrentRecordSelectedDateToolsMainMenu.Size = new System.Drawing.Size(244, 34); + this.clearCurrentRecordSelectedDateToolsMainMenu.Text = "C&urrent Record"; + this.clearCurrentRecordSelectedDateToolsMainMenu.Click += new System.EventHandler(this.ClearCurrentRecord); + // + // selectRangeToolStripMenuItem + // + this.selectRangeToolStripMenuItem.Name = "selectRangeToolStripMenuItem"; + this.selectRangeToolStripMenuItem.Size = new System.Drawing.Size(244, 34); + this.selectRangeToolStripMenuItem.Text = "Select Ran&ge..."; + this.selectRangeToolStripMenuItem.Click += new System.EventHandler(this.DisplayRecordDeletionRangeForm); // // manageItemsToolsMainMenu // this.manageItemsToolsMainMenu.Name = "manageItemsToolsMainMenu"; - this.manageItemsToolsMainMenu.Size = new System.Drawing.Size(286, 34); - this.manageItemsToolsMainMenu.Text = "&Manage Ad Items"; - this.manageItemsToolsMainMenu.Visible = false; - this.manageItemsToolsMainMenu.Click += new System.EventHandler(this.manageItemsToolsMainMenu_Click); + this.manageItemsToolsMainMenu.Size = new System.Drawing.Size(282, 34); + this.manageItemsToolsMainMenu.Text = "Manage Ad &Items"; + this.manageItemsToolsMainMenu.Click += new System.EventHandler(this.DisplayAdItemManager); // - // clearSelectedDateToolsMainMenu + // manageSuppliersToolsMainMenu // - this.clearSelectedDateToolsMainMenu.Name = "clearSelectedDateToolsMainMenu"; - this.clearSelectedDateToolsMainMenu.Size = new System.Drawing.Size(286, 34); - this.clearSelectedDateToolsMainMenu.Text = "&Clear Selected Date"; - this.clearSelectedDateToolsMainMenu.Click += new System.EventHandler(this.clearSelectedDateToolsMainMenu_Click); + this.manageSuppliersToolsMainMenu.Name = "manageSuppliersToolsMainMenu"; + this.manageSuppliersToolsMainMenu.Size = new System.Drawing.Size(286, 34); + this.manageSuppliersToolsMainMenu.Text = "Manage &Suppliers"; + this.manageSuppliersToolsMainMenu.Click += new System.EventHandler(this.manageSuppliersToolsMainMenu_Click); + // + // adSpecialKeyWordsToolsMainMenu + // + this.adSpecialKeyWordsToolsMainMenu.Name = "adSpecialKeyWordsToolsMainMenu"; + this.adSpecialKeyWordsToolsMainMenu.Size = new System.Drawing.Size(282, 34); + this.adSpecialKeyWordsToolsMainMenu.Text = "R&egister Ad Special"; + this.adSpecialKeyWordsToolsMainMenu.Click += new System.EventHandler(this.DisplayRegisterAdSpecial); // // helpMainMenu // @@ -240,15 +273,15 @@ // this.showHideConsoleHelpMainMenu.Name = "showHideConsoleHelpMainMenu"; this.showHideConsoleHelpMainMenu.Size = new System.Drawing.Size(304, 34); - this.showHideConsoleHelpMainMenu.Text = "&Show/Hide Console"; - this.showHideConsoleHelpMainMenu.Click += new System.EventHandler(this.showHideConsoleHelpMainMenu_Click); + this.showHideConsoleHelpMainMenu.Text = "Sh&ow/Hide Console"; + this.showHideConsoleHelpMainMenu.Click += new System.EventHandler(this.ShowHideLogConsole); // // dbVersionHelpMainMenu // this.dbVersionHelpMainMenu.Name = "dbVersionHelpMainMenu"; this.dbVersionHelpMainMenu.Size = new System.Drawing.Size(304, 34); this.dbVersionHelpMainMenu.Text = "Get &Database Version"; - this.dbVersionHelpMainMenu.Click += new System.EventHandler(this.dbVersionHelpMainMenu_Click); + this.dbVersionHelpMainMenu.Click += new System.EventHandler(this.DisplayDatabaseVersionNumber); // // debugMainMenu // @@ -266,21 +299,21 @@ this.rawViewDebugMainMenu.Name = "rawViewDebugMainMenu"; this.rawViewDebugMainMenu.Size = new System.Drawing.Size(270, 34); this.rawViewDebugMainMenu.Text = "Raw View"; - this.rawViewDebugMainMenu.Click += new System.EventHandler(this.rawViewDebugMainMenu_Click); + this.rawViewDebugMainMenu.Click += new System.EventHandler(this.DisplayRawDatabaseView); // // migrateDatabaseDebugMainMenu // this.migrateDatabaseDebugMainMenu.Name = "migrateDatabaseDebugMainMenu"; this.migrateDatabaseDebugMainMenu.Size = new System.Drawing.Size(270, 34); this.migrateDatabaseDebugMainMenu.Text = "Migrate Database"; - this.migrateDatabaseDebugMainMenu.Click += new System.EventHandler(this.debugToolStripMenuItem1_Click); + this.migrateDatabaseDebugMainMenu.Click += new System.EventHandler(this.DisplayDebugTool); // // addRecordToolStripMenuItem // this.addRecordToolStripMenuItem.Name = "addRecordToolStripMenuItem"; this.addRecordToolStripMenuItem.Size = new System.Drawing.Size(270, 34); this.addRecordToolStripMenuItem.Text = "Add Record"; - this.addRecordToolStripMenuItem.Click += new System.EventHandler(this.addRecordToolStripMenuItem_Click_1); + this.addRecordToolStripMenuItem.Click += new System.EventHandler(this.DisplayLegacyAddRecord); // // mainTableLayoutPanel // @@ -946,13 +979,6 @@ this.grossProfitDollarGrossProfitLabel.TabIndex = 2; this.grossProfitDollarGrossProfitLabel.Text = "Dollar Gross Profit: "; // - // reportsMainMenu - // - this.reportsMainMenu.Name = "reportsMainMenu"; - this.reportsMainMenu.Size = new System.Drawing.Size(95, 34); - this.reportsMainMenu.Text = "R&eports"; - this.reportsMainMenu.Visible = false; - // // FrmMain // this.AutoScaleDimensions = new System.Drawing.SizeF(168F, 168F); @@ -1073,10 +1099,13 @@ private System.Windows.Forms.DataGridView invoicesDataGridView; private System.Windows.Forms.ToolStripMenuItem debugMainMenu; private System.Windows.Forms.ToolStripMenuItem migrateDatabaseDebugMainMenu; - private System.Windows.Forms.ToolStripMenuItem clearSelectedDateToolsMainMenu; + private System.Windows.Forms.ToolStripMenuItem clearRecordToolsMainMenu; private System.Windows.Forms.ToolStripMenuItem addRecordToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem rawViewDebugMainMenu; private System.Windows.Forms.ToolStripMenuItem reportsMainMenu; + private System.Windows.Forms.ToolStripMenuItem manageSuppliersToolsMainMenu; + private System.Windows.Forms.ToolStripMenuItem clearCurrentRecordSelectedDateToolsMainMenu; + private System.Windows.Forms.ToolStripMenuItem selectRangeToolStripMenuItem; } } diff --git a/AdvertsingProfitControl/FrmMain.cs b/AdvertsingProfitControl/FrmMain.cs index 346e1d6..b65b953 100644 --- a/AdvertsingProfitControl/FrmMain.cs +++ b/AdvertsingProfitControl/FrmMain.cs @@ -4,7 +4,6 @@ using System.Drawing; using System.Drawing.Printing; using System.IO; using System.Linq; -using System.Runtime.InteropServices; using System.Transactions; using System.Windows.Forms; @@ -41,12 +40,10 @@ namespace AdvertsingProfitControl LoadDate(recentDate.EndingDate); } monthCalendar.DateChanged += ValidateDateChanged; - //projectionsDataGridView.KeyDown += FrmMain_KeyDown; - //var margin = new Margins(50, 50, 0, 0); - //_printDoc.DefaultPageSettings.Margins = margin; - } + #region Calculate Analysis Methods + private void CalculateProfitAnalysis(decimal shrink = 0.30m) { if (actualSalesDataGridView.Rows.Count == 0) @@ -128,7 +125,11 @@ namespace AdvertsingProfitControl perfectGrossProfitLabel.Text = @"Percent Gross Profit: " + grossProfitPercent.ToString("P"); } - private void addRecordToolStripMenuItem_Click(object sender, EventArgs e) + #endregion + + #region Main Menu Click Handlers + + private void DisplayNewRecordForm(object sender, EventArgs e) { var db = new AdvertisingProfitControlModel(); var form = new NewModifyRecord(); @@ -142,7 +143,119 @@ namespace AdvertsingProfitControl LoadDate(date.EndingDate); } - private void showHideConsoleHelpMainMenu_Click(object sender, EventArgs e) + private void DisplayModifyRecordForm(object sender, EventArgs e) + { + var form = new NewModifyRecord(_currentActiveDate); + form.ShowDialog(); + RefreshDateListing(); + //On return reload the date that was just modified by the modify record form. + LoadDate(_currentActiveDate); + } + + private void ClearCurrentRecord(object sender, EventArgs e) + { + var result = MessageBox.Show(@"Are you sure you want to delete all records for the date " + _currentActiveDate.ToShortDateString() + @"?", @"Clear Date", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (result == DialogResult.No) + { + return; + } + + var db = new AdvertisingProfitControlModel(); + var dateRecord = db.WeekEndingDates.Single(x => x.EndingDate == _currentActiveDate); + var projections = db.Projections.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var inventories = db.Inventories.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var actualSales = db.ActualSales.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var invoices = db.Invoices.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var weeklySale = db.WeeklySales.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var taxable = db.Taxables.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var costAnalysis = db.CostAnalysis.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + var comment = db.Notes.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); + + using (var scope = new TransactionScope()) + { + try + { + //Clear projections + foreach (var projection in projections) + { + db.Projections.Remove(projection); + } + //Clear inventory + foreach (var inventory in inventories) + { + db.Inventories.Remove(inventory); + } + //Clear actual sales + foreach (var sale in actualSales) + { + db.ActualSales.Remove(sale); + } + //Clear invoices + foreach (var invoice in invoices) + { + db.Invoices.Remove(invoice); + } + if (weeklySale != null) + { + db.WeeklySales.Remove(weeklySale); + } + if (taxable != null) + { + db.Taxables.Remove(taxable); + } + if (costAnalysis != null) + { + db.CostAnalysis.Remove(costAnalysis); + } + if (comment != null) + { + db.Notes.Remove(comment); + } + db.WeekEndingDates.Remove(dateRecord); + db.SaveChanges(); + scope.Complete(); + ClearForm(); + } + catch (DbUpdateException ex) + { + MessageBox.Show(@"Failed to clear selected date.", @"Error"); + _console.WriteToLog(FrmLogConsole.Level.Error, ex.Message); + } + } + + RefreshDateListing(); + var mostRecentDate = db.WeekEndingDates.OrderByDescending(x => x.EndingDate).FirstOrDefault(); + if (mostRecentDate != null) + { + LoadDate(mostRecentDate.EndingDate); + } + } + + private void DisplayRecordDeletionRangeForm(object sender, EventArgs e) + { + //TODO: Create a form to allow the user to delete a range of dates. + } + + private void DisplayAdItemManager(object sender, EventArgs e) + { + var adItemManager = new FrmManageAdItems(); + adItemManager.ShowDialog(); + } + + + private void manageSuppliersToolsMainMenu_Click(object sender, EventArgs e) + { + var form = new FrmManageSuppliers(); + form.ShowDialog(); + } + + private void DisplayRegisterAdSpecial(object sender, EventArgs e) + { + var form = new FrmRegisterAdSpecial(); + form.ShowDialog(); + } + + private void ShowHideLogConsole(object sender, EventArgs e) { if (_console.IsVisable) { @@ -154,23 +267,7 @@ namespace AdvertsingProfitControl } } - private void modifyRecordMainMenu_Click(object sender, EventArgs e) - { - var form = new NewModifyRecord(_currentActiveDate); - form.ShowDialog(); - RefreshDateListing(); - //On return reload the date that was just modified by the modify record form. - LoadDate(_currentActiveDate); - } - - private void manageItemsToolsMainMenu_Click(object sender, EventArgs e) - { - //TODO: Bring back Manage Ad Items form and managing AdSpecials. - //var adItemManager = new FrmManageAdItems(); - //adItemManager.ShowDialog(); - } - - private void dbVersionHelpMainMenu_Click(object sender, EventArgs e) + private void DisplayDatabaseVersionNumber(object sender, EventArgs e) { var db = new AdvertisingProfitControlModel(); var version = db.Versions.FirstOrDefault(x => x.Id == 1); @@ -183,6 +280,9 @@ namespace AdvertsingProfitControl MessageBox.Show(@"The current database's version is " + version.VersionNumber + @".", @"Database Version Number", MessageBoxButtons.OK, MessageBoxIcon.Information); } + #endregion + + #region Print Handler Methods private void PrintPage(object sender, PrintPageEventArgs e) { @@ -264,9 +364,12 @@ namespace AdvertsingProfitControl printDialog.Document = new PrintDocument(); } + #endregion + + #region DataGridView Constructor Methods + /// - /// Fills the APC DataGridViews with the appropriate columns and starting row for the user to start - /// entering data. + /// Builds the appropriate columns in the APC DataGridViews so they can be filled. /// private void ConstructApcDataGridViews() { @@ -346,9 +449,14 @@ namespace AdvertsingProfitControl } } + #endregion + + #region Date Loading Methods + private void LoadDate(DateTime date) { var db = new AdvertisingProfitControlModel(); + //Check to see if that date record can be found before clearing the form. var dateRecord = db.WeekEndingDates.SingleOrDefault(x => x.EndingDate == date); if (dateRecord == null) { @@ -356,6 +464,7 @@ namespace AdvertsingProfitControl return; } ClearForm(); + //Load all the data attached to the date record. LoadProjectionsTable(dateRecord); LoadInventoryTable(dateRecord); LoadActualSalesTable(dateRecord); @@ -405,14 +514,12 @@ namespace AdvertsingProfitControl projectionsDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.MemberRow; } - if (p.FkAdSpecialId != null && adSpecialIndex == -1) - { - //TODO: Fix null reference when no object is found. - adSpecialIndex = index; - projectionsDataGridView.Rows.Insert(index, 1); - projectionsDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.AdSpecial; - projectionsDataGridView.Rows[index].Cells[3].Value = db.AdSpecials.Single(x => x.Id == p.FkAdSpecialId).Name; - } + if (p.FkAdSpecialId == null || adSpecialIndex != -1) continue; + //TODO: Fix null reference when no object is found. + adSpecialIndex = index; + projectionsDataGridView.Rows.Insert(index, 1); + projectionsDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.AdSpecial; + projectionsDataGridView.Rows[index].Cells[3].Value = db.AdSpecials.Single(x => x.Id == p.FkAdSpecialId).Name; } //Now add the totals row. if (projectionsDataGridView.RowCount == 0) return; @@ -461,13 +568,11 @@ namespace AdvertsingProfitControl inventoryDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.MemberRow; } - if (i.FkAdSpecialId != null && adSpecialIndex == -1) - { - adSpecialIndex = index; - inventoryDataGridView.Rows.Insert(index, 1); - inventoryDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.AdSpecial; - inventoryDataGridView.Rows[index].Cells[2].Value = db.AdSpecials.Single(x => x.Id == i.FkAdSpecialId).Name; - } + if (i.FkAdSpecialId == null || adSpecialIndex != -1) continue; + adSpecialIndex = index; + inventoryDataGridView.Rows.Insert(index, 1); + inventoryDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.AdSpecial; + inventoryDataGridView.Rows[index].Cells[2].Value = db.AdSpecials.Single(x => x.Id == i.FkAdSpecialId).Name; } } @@ -501,13 +606,11 @@ namespace AdvertsingProfitControl actualSalesDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.MemberRow; } - if (a.FkAdSpecialId != null && adSpecialIndex == -1) - { - adSpecialIndex = index; - actualSalesDataGridView.Rows.Insert(index, 1); - actualSalesDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.AdSpecial; - actualSalesDataGridView.Rows[index].Cells[3].Value = db.AdSpecials.Single(x => x.Id == a.FkAdSpecialId).Name; - } + if (a.FkAdSpecialId == null || adSpecialIndex != -1) continue; + adSpecialIndex = index; + actualSalesDataGridView.Rows.Insert(index, 1); + actualSalesDataGridView.Rows[index].DefaultCellStyle.BackColor = ApplicationColors.AdSpecial; + actualSalesDataGridView.Rows[index].Cells[3].Value = db.AdSpecials.Single(x => x.Id == a.FkAdSpecialId).Name; } //Now add the totals row. if (actualSalesDataGridView.RowCount == 0) return; @@ -665,6 +768,8 @@ namespace AdvertsingProfitControl } } + #endregion + private string CheckForHoliday(DayOfWeek day) { var holidayText = string.Empty; @@ -709,6 +814,13 @@ namespace AdvertsingProfitControl return holidayText; } + #region Form Reset And Data Loading Methods + + /// + /// Checks to see if the newly selected date is one that should be loaded. + /// + /// + /// private void ValidateDateChanged(object sender, DateRangeEventArgs e) { if (e.Start == _currentActiveDate || !monthCalendar.BoldedDates.Contains(e.Start)) return; @@ -762,13 +874,6 @@ namespace AdvertsingProfitControl grossProfitEstimatedWeeklyDeptmartmentExpenseLabel.Text = @"Estimated Weekly" + Environment.NewLine + @"Department Expense: "; } - private void debugToolStripMenuItem1_Click(object sender, EventArgs e) - { - var form = new DebugDatabaseConverter(); - form.ShowDialog(); - RefreshDateListing(); - } - private void RefreshDateListing() { var db = new AdvertisingProfitControlModel(); @@ -776,129 +881,52 @@ namespace AdvertsingProfitControl if (monthCalendar.BoldedDates.Length > 0) { modifyRecordMainMenu.Enabled = true; - modifyRecordMainMenu.ToolTipText = @""; + modifyRecordMainMenu.ToolTipText = string.Empty; + clearCurrentRecordSelectedDateToolsMainMenu.Enabled = true; + clearCurrentRecordSelectedDateToolsMainMenu.ToolTipText = string.Empty; } else { dateTimeGroupBox.Text = @"No records found in the database."; modifyRecordMainMenu.Enabled = false; modifyRecordMainMenu.ToolTipText = @"There are no records to modify."; + clearCurrentRecordSelectedDateToolsMainMenu.Enabled = false; + clearCurrentRecordSelectedDateToolsMainMenu.ToolTipText = @"There is no date to clear."; } } - private void clearSelectedDateToolsMainMenu_Click(object sender, EventArgs e) + #endregion + + #region Debug Tool Menu Items + + private void DisplayDebugTool(object sender, EventArgs e) { - var result = MessageBox.Show(@"Are you sure you want to delete all records for the date " + _currentActiveDate.ToShortDateString() + @"?", @"Clear Date", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (result == DialogResult.No) - { - return; - } - - var db = new AdvertisingProfitControlModel(); - var dateRecord = db.WeekEndingDates.Single(x => x.EndingDate == _currentActiveDate); - var projections = db.Projections.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var inventories = db.Inventories.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var actualSales = db.ActualSales.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var invoices = db.Invoices.Where(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var weeklySale = db.WeeklySales.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var taxable = db.Taxables.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var costAnalysis = db.CostAnalysis.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - var comment = db.Notes.SingleOrDefault(x => x.WeekEndingDate.EndingDate == dateRecord.EndingDate); - - using (var scope = new TransactionScope()) - { - try - { - //Clear projections - foreach (var projection in projections) - { - db.Projections.Remove(projection); - } - //Clear inventory - foreach (var inventory in inventories) - { - db.Inventories.Remove(inventory); - } - //Clear actual sales - foreach (var sale in actualSales) - { - db.ActualSales.Remove(sale); - } - //Clear invoices - foreach (var invoice in invoices) - { - db.Invoices.Remove(invoice); - } - if (weeklySale != null) - { - db.WeeklySales.Remove(weeklySale); - } - if (taxable != null) - { - db.Taxables.Remove(taxable); - } - if (costAnalysis != null) - { - db.CostAnalysis.Remove(costAnalysis); - } - if (comment != null) - { - db.Notes.Remove(comment); - } - db.WeekEndingDates.Remove(dateRecord); - db.SaveChanges(); - scope.Complete(); - ClearForm(); - } - catch (DbUpdateException ex) - { - MessageBox.Show(@"Failed to clear selected date.", @"Error"); - _console.WriteToLog(FrmLogConsole.Level.Error, ex.Message); - } - } - + var form = new DebugDatabaseConverter(); + form.ShowDialog(); RefreshDateListing(); - var mostRecentDate = db.WeekEndingDates.OrderByDescending(x => x.EndingDate).FirstOrDefault(); - if (mostRecentDate != null) - { - LoadDate(mostRecentDate.EndingDate); - } } - private void addRecordToolStripMenuItem_Click_1(object sender, EventArgs e) + /// + /// Displays the legacy Add Record form. Completely for looks. + /// + /// + /// + private void DisplayLegacyAddRecord(object sender, EventArgs e) { var form = new FrmAddRecord(); form.ShowDialog(); } - private void rawViewDebugMainMenu_Click(object sender, EventArgs e) + /// + /// + /// + /// + /// + private void DisplayRawDatabaseView(object sender, EventArgs e) { } - private void adSpecialKeyWordsToolsMainMenu_Click(object sender, EventArgs e) - { - var form = new FrmRegisterAdSpecial(); - form.ShowDialog(); - } - } -} - //http://stackoverflow.com/questions/487661/how-do-i-suspend-painting-for-a-control-and-its-children - internal class DrawingControl - { - [DllImport("user32.dll")] - public static extern int SendMessage(IntPtr hWnd, Int32 wMsg, bool wParam, Int32 lParam); - - private const int WmSetredraw = 11; - - public static void SuspendDrawing(Control parent) - { - SendMessage(parent.Handle, WmSetredraw, false, 0); - } - - public static void ResumeDrawing(Control parent) - { - SendMessage(parent.Handle, WmSetredraw, true, 0); - parent.Refresh(); - } + #endregion } +} \ No newline at end of file diff --git a/AdvertsingProfitControl/FrmManageAdItems.Designer.cs b/AdvertsingProfitControl/FrmManageAdItems.Designer.cs new file mode 100644 index 0000000..8277a7f --- /dev/null +++ b/AdvertsingProfitControl/FrmManageAdItems.Designer.cs @@ -0,0 +1,173 @@ +namespace AdvertsingProfitControl +{ + partial class FrmManageAdItems + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.adItemsListView = new System.Windows.Forms.ListView(); + this.addUpdateItemButton = new System.Windows.Forms.Button(); + this.removeAdItemButton = new System.Windows.Forms.Button(); + this.newItemTextBox = new System.Windows.Forms.TextBox(); + this.descriptionTextBox = new System.Windows.Forms.TextBox(); + this.newItemLabel = new System.Windows.Forms.Label(); + this.descriptionLabel = new System.Windows.Forms.Label(); + this.informationLabel = new System.Windows.Forms.Label(); + this.filterLabel = new System.Windows.Forms.Label(); + this.filterComboBox = new System.Windows.Forms.ComboBox(); + this.SuspendLayout(); + // + // adItemsListView + // + this.adItemsListView.Location = new System.Drawing.Point(258, 12); + this.adItemsListView.Name = "adItemsListView"; + this.adItemsListView.Size = new System.Drawing.Size(452, 431); + this.adItemsListView.TabIndex = 3; + this.adItemsListView.TabStop = false; + this.adItemsListView.UseCompatibleStateImageBehavior = false; + this.adItemsListView.View = System.Windows.Forms.View.Details; + // + // addUpdateItemButton + // + this.addUpdateItemButton.Enabled = false; + this.addUpdateItemButton.Location = new System.Drawing.Point(506, 449); + this.addUpdateItemButton.Name = "addUpdateItemButton"; + this.addUpdateItemButton.Size = new System.Drawing.Size(200, 70); + this.addUpdateItemButton.TabIndex = 3; + this.addUpdateItemButton.Text = "Add New Item"; + this.addUpdateItemButton.UseVisualStyleBackColor = true; + this.addUpdateItemButton.Click += new System.EventHandler(this.AddUpdateItem); + // + // removeAdItemButton + // + this.removeAdItemButton.Enabled = false; + this.removeAdItemButton.Location = new System.Drawing.Point(13, 449); + this.removeAdItemButton.Name = "removeAdItemButton"; + this.removeAdItemButton.Size = new System.Drawing.Size(200, 70); + this.removeAdItemButton.TabIndex = 4; + this.removeAdItemButton.Text = "Remove Selected Item"; + this.removeAdItemButton.UseVisualStyleBackColor = true; + this.removeAdItemButton.Click += new System.EventHandler(this.RemoveSelectedAdItem); + // + // newItemTextBox + // + this.newItemTextBox.Location = new System.Drawing.Point(13, 55); + this.newItemTextBox.MaxLength = 32; + this.newItemTextBox.Name = "newItemTextBox"; + this.newItemTextBox.Size = new System.Drawing.Size(200, 29); + this.newItemTextBox.TabIndex = 1; + // + // descriptionTextBox + // + this.descriptionTextBox.Location = new System.Drawing.Point(13, 115); + this.descriptionTextBox.MaxLength = 128; + this.descriptionTextBox.Name = "descriptionTextBox"; + this.descriptionTextBox.Size = new System.Drawing.Size(200, 29); + this.descriptionTextBox.TabIndex = 2; + // + // newItemLabel + // + this.newItemLabel.AutoSize = true; + this.newItemLabel.Location = new System.Drawing.Point(12, 27); + this.newItemLabel.Name = "newItemLabel"; + this.newItemLabel.Size = new System.Drawing.Size(205, 25); + this.newItemLabel.TabIndex = 5; + this.newItemLabel.Text = "Register New Ad Item:"; + // + // descriptionLabel + // + this.descriptionLabel.AutoSize = true; + this.descriptionLabel.Location = new System.Drawing.Point(12, 87); + this.descriptionLabel.Name = "descriptionLabel"; + this.descriptionLabel.Size = new System.Drawing.Size(207, 25); + this.descriptionLabel.TabIndex = 6; + this.descriptionLabel.Text = "Description (Optional):"; + // + // informationLabel + // + this.informationLabel.AutoSize = true; + this.informationLabel.Location = new System.Drawing.Point(8, 219); + this.informationLabel.Name = "informationLabel"; + this.informationLabel.Size = new System.Drawing.Size(0, 25); + this.informationLabel.TabIndex = 7; + // + // filterLabel + // + this.filterLabel.AutoSize = true; + this.filterLabel.Location = new System.Drawing.Point(12, 147); + this.filterLabel.Name = "filterLabel"; + this.filterLabel.Size = new System.Drawing.Size(115, 25); + this.filterLabel.TabIndex = 8; + this.filterLabel.Text = "Apply Filter:"; + // + // filterComboBox + // + this.filterComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.filterComboBox.FormattingEnabled = true; + this.filterComboBox.Location = new System.Drawing.Point(13, 175); + this.filterComboBox.Name = "filterComboBox"; + this.filterComboBox.Size = new System.Drawing.Size(200, 32); + this.filterComboBox.TabIndex = 9; + this.filterComboBox.TabStop = false; + // + // FrmManageAdItems + // + this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(722, 532); + this.Controls.Add(this.filterComboBox); + this.Controls.Add(this.filterLabel); + this.Controls.Add(this.informationLabel); + this.Controls.Add(this.descriptionLabel); + this.Controls.Add(this.newItemLabel); + this.Controls.Add(this.descriptionTextBox); + this.Controls.Add(this.newItemTextBox); + this.Controls.Add(this.removeAdItemButton); + this.Controls.Add(this.addUpdateItemButton); + this.Controls.Add(this.adItemsListView); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.Name = "FrmManageAdItems"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Manage Ad Items"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView adItemsListView; + private System.Windows.Forms.Button addUpdateItemButton; + private System.Windows.Forms.Button removeAdItemButton; + private System.Windows.Forms.TextBox newItemTextBox; + private System.Windows.Forms.TextBox descriptionTextBox; + private System.Windows.Forms.Label newItemLabel; + private System.Windows.Forms.Label descriptionLabel; + private System.Windows.Forms.Label informationLabel; + private System.Windows.Forms.Label filterLabel; + private System.Windows.Forms.ComboBox filterComboBox; + } +} \ No newline at end of file diff --git a/AdvertsingProfitControl/FrmManageAdItems.cs b/AdvertsingProfitControl/FrmManageAdItems.cs new file mode 100644 index 0000000..10cc835 --- /dev/null +++ b/AdvertsingProfitControl/FrmManageAdItems.cs @@ -0,0 +1,256 @@ +using System; +using System.Data.Entity.Infrastructure; +using System.Linq; +using System.Transactions; +using System.Windows.Forms; + +namespace AdvertsingProfitControl +{ + public partial class FrmManageAdItems : Form + { + private bool _isUpdating; + + public FrmManageAdItems() + { + InitializeComponent(); + newItemTextBox.TextChanged += NewItemTextChanged; + adItemsListView.ItemSelectionChanged += UpdateAdItemTextFields; + var columnHeader = new ColumnHeader + { + Name = "AdItemHeaderColumn", + Width = Width / 2 + }; + adItemsListView.Columns.Add(columnHeader); + RefreshAdItemListing(); + } + + private void FilterValueChanged(object sender, EventArgs e) + { + if(filterComboBox.Enabled == false) return; + adItemsListView.Columns[0].Text = @"Current Ad Items (" + (filterComboBox.SelectedItem.ToString() == "All" ? "No Filter" : @"Filter " + filterComboBox.SelectedItem) + @"):"; + adItemsListView.Items.Clear(); + var db = new AdvertisingProfitControlModel(); + var adItems = db.AdItems.Select(x => x); + foreach (var adItem in adItems) + { + var item = new ListViewItem + { + Text = adItem.Name, + Tag = adItem + }; + + if (string.Equals(filterComboBox.SelectedItem.ToString(), "All", StringComparison.Ordinal)) + { + adItemsListView.Items.Add(item); + continue; + } + + if (string.Equals(filterComboBox.SelectedItem.ToString(), "0-9", StringComparison.Ordinal) && char.IsNumber(adItem.Name[0])) + { + adItemsListView.Items.Add(item); + } + else if (!string.Equals(filterComboBox.SelectedItem.ToString(), "0-9", StringComparison.Ordinal) && char.IsLetter(adItem.Name[0])) + { + if(filterComboBox.SelectedItem.ToString()[0] == adItem.Name[0]) + { adItemsListView.Items.Add(item);} + } + } + newItemTextBox.Text = string.Empty; + descriptionTextBox.Text = string.Empty; + removeAdItemButton.Enabled = false; + + } + + private void UpdateAdItemTextFields(object sender, ListViewItemSelectionChangedEventArgs e) + { + newItemTextBox.Text = ((AdItem)e.Item.Tag).Name; + descriptionTextBox.Text = ((AdItem)e.Item.Tag).Description; + _isUpdating = true; + removeAdItemButton.Enabled = true; + addUpdateItemButton.Text = @"Update Ad Item"; + newItemLabel.Text = @"Update Ad Item:"; + } + + private void NewItemTextChanged(object sender, EventArgs e) + { + if (_isUpdating && newItemTextBox.Text.Length == 0) + { + _isUpdating = false; + descriptionTextBox.Text = string.Empty; + addUpdateItemButton.Text = @"Register Ad Item"; + newItemLabel.Text = @"Register New Ad Item:"; + } + addUpdateItemButton.Enabled = newItemTextBox.Text.Length > 0; + } + + private void RefreshAdItemListing(string filter = "") + { + filterComboBox.SelectedIndexChanged -= FilterValueChanged; + //Check to see if the current view is empty. + if (adItemsListView.Items.Count == 0) filter = string.Empty; + adItemsListView.Items.Clear(); + filterComboBox.Items.Clear(); + filterComboBox.Items.Add("All"); + var db = new AdvertisingProfitControlModel(); + var adItems = db.AdItems.Select(x => x).OrderBy(x => x.Name); + var adItemCount = 0; + var numberFound = false; + foreach (var adItem in adItems) + { + var item = new ListViewItem + { + Text = adItem.Name, + Tag = adItem + }; + if (filter == string.Empty || filter == "All") + { + adItemsListView.Items.Add(item); + } + else if (adItem.Name[0].ToString() == filter) + { + adItemsListView.Items.Add(item); + } + else if (filter == "0-9" && char.IsNumber(adItem.Name[0])) + { + adItemsListView.Items.Add(item); + } + //Populate the filter. + if (!filterComboBox.Items.Contains(adItem.Name[0].ToString())) + { + if (char.IsDigit(adItem.Name[0]) && !numberFound) + { + filterComboBox.Items.Add("0-9"); + numberFound = true; + } + else + { + filterComboBox.Items.Add(adItem.Name[0].ToString()); + } + } + adItemCount++; + } + + if (adItemCount > 0) + { + filterComboBox.Enabled = true; + filterComboBox.SelectedIndex = filterComboBox.Items.Contains(filter) ? filterComboBox.Items.IndexOf(filter) : 0; + adItemsListView.Columns[0].Text = @"Current Ad Items (" + (filterComboBox.SelectedItem.ToString() == "All" ? "No Filter" : @"Filter " + filterComboBox.SelectedItem) + @"):"; + } + else + { + adItemsListView.Columns[0].Text = @"No Ad Items to Display."; + filterComboBox.SelectedIndex = 0; + } + removeAdItemButton.Enabled = false; + newItemTextBox.Text = string.Empty; + descriptionTextBox.Text = string.Empty; + filterComboBox.SelectedIndexChanged += FilterValueChanged; + } + + private void RemoveSelectedAdItem(object sender, EventArgs e) + { + var item = adItemsListView.SelectedItems[0]; + var oldAdItem = (AdItem)item.Tag; + var db = new AdvertisingProfitControlModel(); + var adItemEntry = db.AdItems.Single(x => x.Id == oldAdItem.Id); + //Check to see if the ad special is used by other tables. + if (adItemEntry.ActualSales.Count > 0) + { + //If so, display a warning to the user about the potential data loss. + var result = + MessageBox.Show( + adItemEntry.ActualSales.Count + + @" reference(s) to this item found. Do you want to delete these records? This can not be undone.", + @"References to " + oldAdItem.Name + @" Found", MessageBoxButtons.YesNoCancel, + MessageBoxIcon.Question); + if (result != DialogResult.Yes) return; + //Perform the necessary operations to remove all references to the key word. + using (var scope = new TransactionScope()) + { + try + { + db.Projections.RemoveRange(db.Projections.Where(x => x.FkAdItemId == oldAdItem.Id)); + db.Inventories.RemoveRange(db.Inventories.Where(x => x.FkAdItemId == oldAdItem.Id)); + db.ActualSales.RemoveRange(db.ActualSales.Where(x => x.FkAdItemId == oldAdItem.Id)); + db.AdItems.Remove(adItemEntry); + db.SaveChanges(); + scope.Complete(); + informationLabel.Text = @"Removed '" + Environment.NewLine + oldAdItem.Name + + Environment.NewLine + @"' successfully."; + adItemsListView.Items.RemoveAt(adItemsListView.SelectedItems[0].Index); + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to remove " + Environment.NewLine + oldAdItem.Name + @"." + + Environment.NewLine + ex.Message; + } + } + } + else + { + try + { + db.AdItems.Remove(adItemEntry); + db.SaveChanges(); + informationLabel.Text = @"Removed '" + Environment.NewLine + oldAdItem.Name + + Environment.NewLine + @"' successfully."; + adItemsListView.Items.RemoveAt(adItemsListView.SelectedItems[0].Index); + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to remove " + Environment.NewLine + oldAdItem.Name + @"." + Environment.NewLine + ex.Message; + } + } + RefreshAdItemListing(filterComboBox.SelectedItem.ToString()); + } + + private void AddUpdateItem(object sender, EventArgs e) + { + var db = new AdvertisingProfitControlModel(); + if (!_isUpdating) + { + if (!db.AdItems.Any(x => x.Name == newItemTextBox.Text)) + { + var adItem = new AdItem + { + Name = newItemTextBox.Text, + Description = descriptionTextBox.Text + }; + db.AdItems.Add(adItem); + try + { + db.SaveChanges(); + informationLabel.Text = @"Registered '" + Environment.NewLine + adItem.Name + Environment.NewLine + @"' successfully."; + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to register '" + Environment.NewLine + adItem.Name + @"'." + Environment.NewLine + + ex.Message; + } + } + else + { + MessageBox.Show(@"Ad item '" + newItemTextBox.Text + @"' already exists.", + @"Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + newItemTextBox.Text = string.Empty; + } + } + else + { + var item = adItemsListView.SelectedItems[0]; + var index = ((AdItem)item.Tag).Id; + var adItem = db.AdItems.SingleOrDefault(x => x.Id == index); + if (adItem == null) + { + informationLabel.Text = @"Failed to retrieve " + Environment.NewLine + @"ad item ID."; + return; + } + adItem.Name = newItemTextBox.Text; + adItem.Description = descriptionTextBox.Text; + db.SaveChanges(); + informationLabel.Text = @"Updated '" + Environment.NewLine + newItemTextBox.Text + Environment.NewLine + @"' successfully."; + } + RefreshAdItemListing(filterComboBox.SelectedItem.ToString()); + } + } +} diff --git a/AdvertsingProfitControl/FrmManageAdItems.resx b/AdvertsingProfitControl/FrmManageAdItems.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AdvertsingProfitControl/FrmManageAdItems.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AdvertsingProfitControl/FrmManageSuppliers.Designer.cs b/AdvertsingProfitControl/FrmManageSuppliers.Designer.cs new file mode 100644 index 0000000..20168f4 --- /dev/null +++ b/AdvertsingProfitControl/FrmManageSuppliers.Designer.cs @@ -0,0 +1,151 @@ +namespace AdvertsingProfitControl +{ + partial class FrmManageSuppliers + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.suppliersListBox = new System.Windows.Forms.ListView(); + this.descriptionTextBox = new System.Windows.Forms.TextBox(); + this.descriptionLabel = new System.Windows.Forms.Label(); + this.informationLabel = new System.Windows.Forms.Label(); + this.newSupplierTextBox = new System.Windows.Forms.TextBox(); + this.newSupplierLabel = new System.Windows.Forms.Label(); + this.deleteSupplierButton = new System.Windows.Forms.Button(); + this.registerSupplierButton = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // suppliersListBox + // + this.suppliersListBox.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; + this.suppliersListBox.Location = new System.Drawing.Point(257, 12); + this.suppliersListBox.Name = "suppliersListBox"; + this.suppliersListBox.Size = new System.Drawing.Size(423, 412); + this.suppliersListBox.TabIndex = 16; + this.suppliersListBox.TabStop = false; + this.suppliersListBox.UseCompatibleStateImageBehavior = false; + this.suppliersListBox.View = System.Windows.Forms.View.Details; + // + // descriptionTextBox + // + this.descriptionTextBox.Location = new System.Drawing.Point(14, 115); + this.descriptionTextBox.MaxLength = 128; + this.descriptionTextBox.Name = "descriptionTextBox"; + this.descriptionTextBox.Size = new System.Drawing.Size(228, 29); + this.descriptionTextBox.TabIndex = 2; + // + // descriptionLabel + // + this.descriptionLabel.AutoSize = true; + this.descriptionLabel.Location = new System.Drawing.Point(14, 82); + this.descriptionLabel.Name = "descriptionLabel"; + this.descriptionLabel.Size = new System.Drawing.Size(207, 25); + this.descriptionLabel.TabIndex = 15; + this.descriptionLabel.Text = "Description (Optional):"; + // + // informationLabel + // + this.informationLabel.AutoSize = true; + this.informationLabel.Location = new System.Drawing.Point(14, 162); + this.informationLabel.Name = "informationLabel"; + this.informationLabel.Size = new System.Drawing.Size(0, 25); + this.informationLabel.TabIndex = 14; + // + // newSupplierTextBox + // + this.newSupplierTextBox.Location = new System.Drawing.Point(14, 45); + this.newSupplierTextBox.MaxLength = 32; + this.newSupplierTextBox.Name = "newSupplierTextBox"; + this.newSupplierTextBox.Size = new System.Drawing.Size(228, 29); + this.newSupplierTextBox.TabIndex = 1; + // + // newSupplierLabel + // + this.newSupplierLabel.AutoSize = true; + this.newSupplierLabel.Location = new System.Drawing.Point(14, 12); + this.newSupplierLabel.Name = "newSupplierLabel"; + this.newSupplierLabel.Size = new System.Drawing.Size(166, 25); + this.newSupplierLabel.TabIndex = 11; + this.newSupplierLabel.Text = "Register Supplier:"; + // + // deleteSupplierButton + // + this.deleteSupplierButton.Enabled = false; + this.deleteSupplierButton.Location = new System.Drawing.Point(12, 430); + this.deleteSupplierButton.Name = "deleteSupplierButton"; + this.deleteSupplierButton.Size = new System.Drawing.Size(200, 50); + this.deleteSupplierButton.TabIndex = 4; + this.deleteSupplierButton.Text = "Remove Supplier"; + this.deleteSupplierButton.UseVisualStyleBackColor = true; + this.deleteSupplierButton.Click += new System.EventHandler(this.deleteSupplierButton_Click); + // + // registerSupplierButton + // + this.registerSupplierButton.Enabled = false; + this.registerSupplierButton.Location = new System.Drawing.Point(480, 430); + this.registerSupplierButton.Name = "registerSupplierButton"; + this.registerSupplierButton.Size = new System.Drawing.Size(200, 50); + this.registerSupplierButton.TabIndex = 3; + this.registerSupplierButton.Text = "Register Supplier"; + this.registerSupplierButton.UseVisualStyleBackColor = true; + this.registerSupplierButton.Click += new System.EventHandler(this.registerSupplierButton_Click); + // + // FrmManageSuppliers + // + this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(692, 492); + this.Controls.Add(this.suppliersListBox); + this.Controls.Add(this.descriptionTextBox); + this.Controls.Add(this.descriptionLabel); + this.Controls.Add(this.informationLabel); + this.Controls.Add(this.newSupplierTextBox); + this.Controls.Add(this.newSupplierLabel); + this.Controls.Add(this.deleteSupplierButton); + this.Controls.Add(this.registerSupplierButton); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.Fixed3D; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "FrmManageSuppliers"; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; + this.Text = "Manage Suppliers"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.ListView suppliersListBox; + private System.Windows.Forms.TextBox descriptionTextBox; + private System.Windows.Forms.Label descriptionLabel; + private System.Windows.Forms.Label informationLabel; + private System.Windows.Forms.TextBox newSupplierTextBox; + private System.Windows.Forms.Label newSupplierLabel; + private System.Windows.Forms.Button deleteSupplierButton; + private System.Windows.Forms.Button registerSupplierButton; + } +} \ No newline at end of file diff --git a/AdvertsingProfitControl/FrmManageSuppliers.cs b/AdvertsingProfitControl/FrmManageSuppliers.cs new file mode 100644 index 0000000..5d89ef3 --- /dev/null +++ b/AdvertsingProfitControl/FrmManageSuppliers.cs @@ -0,0 +1,180 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Data.Entity.Infrastructure; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Transactions; +using System.Windows.Forms; + +namespace AdvertsingProfitControl +{ + public partial class FrmManageSuppliers : Form + { + private bool _isUpdating; + + public FrmManageSuppliers() + { + InitializeComponent(); + newSupplierTextBox.TextChanged += UpdateButtonOnTextChanged; + suppliersListBox.ItemSelectionChanged += UpdateSupplierFields; + var columnHeader = new ColumnHeader + { + Name = "SupplierHeaderColumn", + Width = Width / 2 + }; + suppliersListBox.Columns.Add(columnHeader); + RefreshSupplierListing(); + } + + private void UpdateSupplierFields(object sender, ListViewItemSelectionChangedEventArgs e) + { + newSupplierTextBox.Text = ((Supplier)e.Item.Tag).Name; + descriptionTextBox.Text = ((Supplier)e.Item.Tag).Description; + _isUpdating = true; + deleteSupplierButton.Enabled = true; + registerSupplierButton.Text = @"Update Supplier"; + newSupplierLabel.Text = @"Update Supplier:"; + } + + private void UpdateButtonOnTextChanged(object sender, EventArgs e) + { + if (_isUpdating && newSupplierTextBox.Text.Length == 0) + { + _isUpdating = false; + descriptionTextBox.Text = string.Empty; + registerSupplierButton.Text = @"Register Supplier"; + newSupplierLabel.Text = @"Register New Supplier:"; + } + registerSupplierButton.Enabled = newSupplierTextBox.Text.Length > 0; + } + + private void RefreshSupplierListing() + { + suppliersListBox.Items.Clear(); + var db = new AdvertisingProfitControlModel(); + var suppliers = db.Suppliers.Select(x => x).OrderBy(x => x.Name); + var supplierCount = 0; + foreach (var supplier in suppliers) + { + var item = new ListViewItem + { + Text = supplier.Name, + Tag = supplier + }; + suppliersListBox.Items.Add(item); + supplierCount++; + } + + suppliersListBox.Columns[0].Text = supplierCount > 0 ? @"Current Suppliers:" : @"No Suppliers to Display"; + deleteSupplierButton.Enabled = false; + newSupplierTextBox.Text = string.Empty; + descriptionTextBox.Text = string.Empty; + } + + private void registerSupplierButton_Click(object sender, EventArgs e) + { + var db = new AdvertisingProfitControlModel(); + if (!_isUpdating) + { + if (!db.Suppliers.Any(x => x.Name == newSupplierTextBox.Text)) + { + var supplier = new Supplier() + { + Name = newSupplierTextBox.Text, + Description = descriptionTextBox.Text + }; + db.Suppliers.Add(supplier); + try + { + db.SaveChanges(); + informationLabel.Text = @"Registered '" + Environment.NewLine + supplier.Name + Environment.NewLine + @"' successfully."; + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to register '" + Environment.NewLine + supplier.Name + @"'." + Environment.NewLine + + ex.Message; + } + } + else + { + MessageBox.Show(@"Supplier '" + newSupplierTextBox.Text + @"' already exists.", + @"Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); + newSupplierTextBox.Text = string.Empty; + } + } + else + { + var item = suppliersListBox.SelectedItems[0]; + var index = ((Supplier)item.Tag).Id; + var supplier = db.Suppliers.SingleOrDefault(x => x.Id == index); + if (supplier == null) + { + informationLabel.Text = @"Failed to retrieve " + Environment.NewLine + @"supplier ID."; + return; + } + supplier.Name = newSupplierTextBox.Text; + supplier.Description = descriptionTextBox.Text; + db.SaveChanges(); + informationLabel.Text = @"Updated '" + Environment.NewLine + newSupplierTextBox.Text + Environment.NewLine + @"' successfully."; + } + RefreshSupplierListing(); + } + + private void deleteSupplierButton_Click(object sender, EventArgs e) + { + var item = suppliersListBox.SelectedItems[0]; + var oldSupplier = (Supplier)item.Tag; + var db = new AdvertisingProfitControlModel(); + var supplier = db.Suppliers.Single(x => x.Id == oldSupplier.Id); + //Check to see if the ad special is used by other tables. + if (supplier.Invoices.Count > 0) + { + //If so, display a warning to the user about the potential data loss. + var result = + MessageBox.Show( + supplier.Invoices.Count + + @" reference(s) to this supplier found. Do you want to delete these records? This can not be undone.", + @"References to " + oldSupplier.Name + @" Found", MessageBoxButtons.YesNoCancel, + MessageBoxIcon.Question); + if (result != DialogResult.Yes) return; + //Perform the necessary operations to remove all references to the key word. + using (var scope = new TransactionScope()) + { + try + { + db.Invoices.RemoveRange(db.Invoices.Where(x => x.FkSupplierId == oldSupplier.Id)); + db.Suppliers.Remove(supplier); + db.SaveChanges(); + scope.Complete(); + informationLabel.Text = @"Removed '" + Environment.NewLine + oldSupplier.Name + + Environment.NewLine + @"' successfully."; + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to remove " + Environment.NewLine + oldSupplier.Name + @"." + + Environment.NewLine + ex.Message; + } + } + } + else + { + try + { + db.Suppliers.Remove(supplier); + db.SaveChanges(); + informationLabel.Text = @"Removed '" + Environment.NewLine + oldSupplier.Name + + Environment.NewLine + @"' successfully."; + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to remove " + Environment.NewLine + oldSupplier.Name + @"." + Environment.NewLine + ex.Message; + } + } + RefreshSupplierListing(); + } + } +} diff --git a/AdvertsingProfitControl/FrmManageSuppliers.resx b/AdvertsingProfitControl/FrmManageSuppliers.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/AdvertsingProfitControl/FrmManageSuppliers.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/AdvertsingProfitControl/FrmRegisterAdSpecial.Designer.cs b/AdvertsingProfitControl/FrmRegisterAdSpecial.Designer.cs index 8fa0a00..2cdf65f 100644 --- a/AdvertsingProfitControl/FrmRegisterAdSpecial.Designer.cs +++ b/AdvertsingProfitControl/FrmRegisterAdSpecial.Designer.cs @@ -41,10 +41,10 @@ // registerAdSpecialButton // this.registerAdSpecialButton.Enabled = false; - this.registerAdSpecialButton.Location = new System.Drawing.Point(476, 428); + this.registerAdSpecialButton.Location = new System.Drawing.Point(480, 430); this.registerAdSpecialButton.Name = "registerAdSpecialButton"; this.registerAdSpecialButton.Size = new System.Drawing.Size(200, 50); - this.registerAdSpecialButton.TabIndex = 0; + this.registerAdSpecialButton.TabIndex = 3; this.registerAdSpecialButton.Text = "Register Ad Special"; this.registerAdSpecialButton.UseVisualStyleBackColor = true; this.registerAdSpecialButton.Click += new System.EventHandler(this.RegisterNewAdSpecial); @@ -52,10 +52,10 @@ // deleteAdSpecialButton // this.deleteAdSpecialButton.Enabled = false; - this.deleteAdSpecialButton.Location = new System.Drawing.Point(13, 428); + this.deleteAdSpecialButton.Location = new System.Drawing.Point(12, 430); this.deleteAdSpecialButton.Name = "deleteAdSpecialButton"; this.deleteAdSpecialButton.Size = new System.Drawing.Size(200, 50); - this.deleteAdSpecialButton.TabIndex = 2; + this.deleteAdSpecialButton.TabIndex = 4; this.deleteAdSpecialButton.Text = "Remove Ad Special"; this.deleteAdSpecialButton.UseVisualStyleBackColor = true; this.deleteAdSpecialButton.Click += new System.EventHandler(this.deleteAdSpecialButton_Click); @@ -72,18 +72,18 @@ // newAdSpecialTextBox // this.newAdSpecialTextBox.Location = new System.Drawing.Point(17, 54); + this.newAdSpecialTextBox.MaxLength = 32; this.newAdSpecialTextBox.Name = "newAdSpecialTextBox"; this.newAdSpecialTextBox.Size = new System.Drawing.Size(228, 29); - this.newAdSpecialTextBox.TabIndex = 4; + this.newAdSpecialTextBox.TabIndex = 1; // // informationLabel // this.informationLabel.AutoSize = true; this.informationLabel.Location = new System.Drawing.Point(17, 171); this.informationLabel.Name = "informationLabel"; - this.informationLabel.Size = new System.Drawing.Size(64, 25); + this.informationLabel.Size = new System.Drawing.Size(0, 25); this.informationLabel.TabIndex = 5; - this.informationLabel.Text = "label1"; // // adSpecialDescription // @@ -97,17 +97,19 @@ // descriptionTextBox // this.descriptionTextBox.Location = new System.Drawing.Point(17, 124); + this.descriptionTextBox.MaxLength = 128; this.descriptionTextBox.Name = "descriptionTextBox"; this.descriptionTextBox.Size = new System.Drawing.Size(228, 29); - this.descriptionTextBox.TabIndex = 7; + this.descriptionTextBox.TabIndex = 2; // // adSpecialsListBox // this.adSpecialsListBox.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable; - this.adSpecialsListBox.Location = new System.Drawing.Point(256, 21); + this.adSpecialsListBox.Location = new System.Drawing.Point(260, 21); this.adSpecialsListBox.Name = "adSpecialsListBox"; this.adSpecialsListBox.Size = new System.Drawing.Size(420, 401); this.adSpecialsListBox.TabIndex = 8; + this.adSpecialsListBox.TabStop = false; this.adSpecialsListBox.UseCompatibleStateImageBehavior = false; this.adSpecialsListBox.View = System.Windows.Forms.View.Details; // @@ -115,7 +117,7 @@ // this.AutoScaleDimensions = new System.Drawing.SizeF(11F, 24F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(686, 489); + this.ClientSize = new System.Drawing.Size(692, 492); this.Controls.Add(this.adSpecialsListBox); this.Controls.Add(this.descriptionTextBox); this.Controls.Add(this.adSpecialDescription); diff --git a/AdvertsingProfitControl/FrmRegisterAdSpecial.cs b/AdvertsingProfitControl/FrmRegisterAdSpecial.cs index 68c1f3d..7b1a49d 100644 --- a/AdvertsingProfitControl/FrmRegisterAdSpecial.cs +++ b/AdvertsingProfitControl/FrmRegisterAdSpecial.cs @@ -1,19 +1,13 @@ using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; using System.Data.Entity.Infrastructure; -using System.Drawing; using System.Linq; -using System.Text; -using System.Threading.Tasks; +using System.Transactions; using System.Windows.Forms; namespace AdvertsingProfitControl { public partial class FrmRegisterAdSpecial : Form { - private readonly ToolTip _tt = new ToolTip(); private bool _isUpdating; public FrmRegisterAdSpecial() @@ -24,10 +18,9 @@ namespace AdvertsingProfitControl { Name = "AdSpecialsHeaderColumn", Text = @"Current Ad Special Grouping Keywords:", - Width = adSpecialsListBox.Width - 5 + Width = Width / 2 }; adSpecialsListBox.Columns.Add(columnHeader); - adSpecialsListBox.MouseMove += OnMouseMove; adSpecialsListBox.ItemSelectionChanged += UpdateAdSpecialTextBoxes; RefreshAdSpecialListing(); } @@ -39,6 +32,7 @@ namespace AdvertsingProfitControl _isUpdating = true; deleteAdSpecialButton.Enabled = true; registerAdSpecialButton.Text = @"Update Ad Special"; + newAdSpecialLabel.Text = @"Update Ad Special:"; } private void NewAdSpecialTextChanged(object sender, EventArgs e) @@ -48,6 +42,7 @@ namespace AdvertsingProfitControl _isUpdating = false; descriptionTextBox.Text = string.Empty; registerAdSpecialButton.Text = @"Register Ad Special"; + newAdSpecialLabel.Text = @"Register New Ad Special:"; } registerAdSpecialButton.Enabled = newAdSpecialTextBox.Text.Length > 0; } @@ -101,24 +96,11 @@ namespace AdvertsingProfitControl RefreshAdSpecialListing(); } - private void OnMouseMove(object sender, MouseEventArgs e) - { - var box = sender as ListBox; - if (box == null) return; - var listBox = box; - var point = new Point(e.X, e.Y); - var hoverIndex = listBox.IndexFromPoint(point); - if (hoverIndex >= 0 && hoverIndex < listBox.Items.Count) - { - // _tt.SetToolTip(listBox, _descriptions[hoverIndex]); - } - } - private void RefreshAdSpecialListing() { adSpecialsListBox.Items.Clear(); var db = new AdvertisingProfitControlModel(); - var adSpecials = db.AdSpecials.Select(x => x); + var adSpecials = db.AdSpecials.Select(x => x).OrderBy(x => x.Name); foreach (var adSpecial in adSpecials) { var item = new ListViewItem @@ -135,15 +117,57 @@ namespace AdvertsingProfitControl private void deleteAdSpecialButton_Click(object sender, EventArgs e) { - //TODO: Scan for Ad Specials that are in use by a table before removing. var item = adSpecialsListBox.SelectedItems[0]; var adSpecial = (AdSpecial) item.Tag; var db = new AdvertisingProfitControlModel(); var ad = db.AdSpecials.Single(x => x.Id == adSpecial.Id); - db.AdSpecials.Remove(ad); - db.SaveChanges(); + //Check to see if the ad special is used by other tables. + if (ad.ActualSales.Count > 0) + { + //If so, display a warning to the user about the potential data loss. + var result = + MessageBox.Show( + ad.ActualSales.Count + + @" reference(s) to this keyword found. Do you want to delete these records? This can not be undone.", + @"References to " + adSpecial.Name + @" Found", MessageBoxButtons.YesNoCancel, + MessageBoxIcon.Question); + if (result != DialogResult.Yes) return; + //Perform the necessary operations to remove all references to the key word. + using (var scope = new TransactionScope()) + { + try + { + db.Projections.RemoveRange(db.Projections.Where(x => x.FkAdSpecialId == adSpecial.Id)); + db.Inventories.RemoveRange(db.Inventories.Where(x => x.FkAdSpecialId == adSpecial.Id)); + db.ActualSales.RemoveRange(db.ActualSales.Where(x => x.FkAdSpecialId == adSpecial.Id)); + db.AdSpecials.Remove(ad); + db.SaveChanges(); + scope.Complete(); + informationLabel.Text = @"Removed '" + Environment.NewLine + adSpecial.Name + + Environment.NewLine + @"' successfully."; + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to remove " + Environment.NewLine + adSpecial.Name + @"." + + Environment.NewLine + ex.Message; + } + } + } + else + { + try + { + db.AdSpecials.Remove(ad); + db.SaveChanges(); + informationLabel.Text = @"Removed '" + Environment.NewLine + adSpecial.Name + + Environment.NewLine + @"' successfully."; + } + catch (DbUpdateException ex) + { + informationLabel.Text = @"Failed to remove " + Environment.NewLine + adSpecial.Name + @"." + Environment.NewLine + ex.Message; + } + } RefreshAdSpecialListing(); - informationLabel.Text = @"Removed '" + Environment.NewLine + adSpecial.Name + Environment.NewLine + @"' successfully."; } } } diff --git a/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.csproj.FileListAbsolute.txt b/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.csproj.FileListAbsolute.txt new file mode 100644 index 0000000..e0b4939 --- /dev/null +++ b/AdvertsingProfitControl/obj/Debug/AdvertsingProfitControl.csproj.FileListAbsolute.txt @@ -0,0 +1,23 @@ +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.csprojResolveAssemblyReference.cache +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.DebugDatabaseConverter.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmAddRecord.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmMain.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmLogConsole.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.FrmRegisterAdSpecial.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.NewModifyRecord.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.Properties.Resources.resources +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.csproj.GenerateResource.Cache +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\APCDatabase.accdb +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.exe.config +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.exe +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\AdvertsingProfitControl.pdb +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.dll +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.SqlServer.dll +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.dll +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.WinForms.dll +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.xml +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\EntityFramework.SqlServer.xml +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.pdb +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\bin\Debug\HtmlRenderer.WinForms.pdb +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.exe +C:\Users\glmcc\Documents\Source Control\AdvertisingProfitControl\AdvertsingProfitControl\obj\Debug\AdvertsingProfitControl.pdb