using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.OleDb; using System.Drawing; using System.IO; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace AdvertsingProfitControl { public partial class DebugDatabaseConverter : Form { private string _filePath; private string _connectionString; public DebugDatabaseConverter() { InitializeComponent(); existingDatesListBox.SelectedIndexChanged += EnableButton; } private void EnableButton(object sender, EventArgs e) { moveOverButton.Enabled = true; } private void DebugDatabaseConverter_Load(object sender, EventArgs e) { openFileDialog1.DefaultExt = "accdb"; openFileDialog1.Filter = @"Access Files (*.accdb) | *.accdb"; if (openFileDialog1.ShowDialog() == DialogResult.OK) { var filePath = openFileDialog1.FileName; if (File.Exists(filePath)) { _filePath = filePath; //Get the list of dates. var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Persist Security Info=False"; _connectionString = connectionString; var dates = new List(); var oleDbCommand = new OleDbCommand { CommandText = "SELECT EndOfWeekDate FROM WeekEnding" }; var connection = new OleDbConnection(connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { connection.Open(); using (var reader = oleDbCommand.ExecuteReader()) { while (reader != null && reader.Read()) { dates.Add(DateTime.Parse(reader[0].ToString())); } } } } foreach (var date in dates) { existingDatesListBox.Items.Add(date.ToShortDateString()); } } } } private void moveOverButton_Click(object sender, EventArgs e) { if (existingDatesListBox.SelectedIndex != -1) { datesToConvertListBox.Items.Add(existingDatesListBox.SelectedItem); existingDatesListBox.Items.Remove(existingDatesListBox.SelectedItem); moveOverButton.Enabled = false; } } private void convertButton_Click(object sender, EventArgs e) { if (datesToConvertListBox.Items.Count == 0) { return; } foreach (var date in datesToConvertListBox.Items) { var oldDateId = GetDateIdByDateString(date.ToString()); //Get the tables. var projectionsTable = ReturnProjections(oldDateId); var inventoryTable = ReturnInventory(oldDateId); var actualSales = ReturnActualSales(oldDateId); var invoices = ReturnInvoiceTable(oldDateId); var weeklySales = ReturnWeeklySalesFromDateId(oldDateId); MassiveWriteFunction(date.ToString(), projectionsTable, inventoryTable, actualSales, invoices, weeklySales); } } private void MassiveWriteFunction(string dateString, DataTable projections, DataTable inventory, DataTable actualSales, DataTable invoice, DataTable weeklySales) { var dbT = new DatabaseTracker(); var dbR = new DatabaseReader(); //Get a new ID number for the date supplied. var oleDbConnection = new OleDbConnection(dbT.DatabaseConnectionString); var oleDbCommand = new OleDbCommand { Connection = oleDbConnection }; OleDbTransaction oleDbTransaction = null; try { 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(); int adspecialId = 0; for (var rowIndex = 0; rowIndex < projections.Rows.Count; rowIndex++) { //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 for (var i = 0; i < inventory.Rows.Count; i++) { 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("BegnningInventory", inventory.Rows[i][1]); oleDbCommand.Parameters.AddWithValue("Received", inventory.Rows[i][2]); oleDbCommand.Parameters.AddWithValue("TotalInventory", inventory.Rows[i][3]); oleDbCommand.Parameters.AddWithValue("EndingInventory", inventory.Rows[i][4]); 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 for (var rowIndex = 0; rowIndex < actualSales.Rows.Count; rowIndex++) { //Get the ID number of the ad item. var adItemId = int.Parse(RetrieveAdItemId(actualSales.Rows[rowIndex][0].ToString())); adspecialId = GetAdSpecialId(int.Parse(actualSales.Rows[rowIndex][8].ToString())); oleDbCommand.CommandText = "INSERT INTO ActualSales (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", actualSales.Rows[rowIndex][1]); oleDbCommand.Parameters.AddWithValue("SalesPrice", actualSales.Rows[rowIndex][2]); oleDbCommand.Parameters.AddWithValue("TotalSales", actualSales.Rows[rowIndex][3]); oleDbCommand.Parameters.AddWithValue("Cost", actualSales.Rows[rowIndex][4]); oleDbCommand.Parameters.AddWithValue("ProfitReturn", actualSales.Rows[rowIndex][5]); oleDbCommand.Parameters.AddWithValue("TotalProfitReturn", actualSales.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(); } for (var i = 0; i < invoice.Rows.Count; i++) { var supplierId = GetSupplierId(invoice.Rows[i][1].ToString()); //SELECT Invoice.InvoiceDate, Supplier.SupplierName, Invoice.InvoiceNumber, Invoice.InvoiceNetAmountAtCost, Invoice.InvoiceNetAmount, Invoice.InvoiceNote FROM (Supplier INNER JOIN Invoice ON Supplier.ID = Invoice.FK_Supplier) WHERE FK_DateID = ? oleDbCommand.CommandText = "INSERT INTO Invoice (InvoiceDate, InvoiceNumber, InvoiceNetAmountAtCost, InvoiceNetAmount, InvoiceNote, FK_Supplier, FK_DateID) VALUES(?,?,?,?,?,?,?)"; oleDbCommand.Parameters.AddWithValue("InvoiceDate", invoice.Rows[i][0].ToString()); oleDbCommand.Parameters.AddWithValue("InvoiceNumber", invoice.Rows[i][2].ToString()); oleDbCommand.Parameters.AddWithValue("InvoiceNetAmountAtCost", invoice.Rows[i][3].ToString() == "" ? 0 : double.Parse(invoice.Rows[i][3].ToString())); oleDbCommand.Parameters.AddWithValue("InvoiceNetAmount", invoice.Rows[i][4].ToString() == "" ? 0 : double.Parse(invoice.Rows[i][4].ToString())); oleDbCommand.Parameters.AddWithValue("InvoiceNote", invoice.Rows[i][5].ToString()); oleDbCommand.Parameters.AddWithValue("FK_Supplier", supplierId); oleDbCommand.Parameters.AddWithValue("FK_DateID", dateId); oleDbCommand.ExecuteNonQuery(); oleDbCommand.Parameters.Clear(); } //"SELECT WeeklySales.Sunday, WeeklySales.Monday, WeeklySales.Tuesday, WeeklySales.Wednesday, WeeklySales.Thursday, WeeklySales.Friday, WeeklySales.Saturday, WeeklySales.TotalSales FROM WeeklySales WHERE FK_DateID = ?" oleDbCommand.CommandText = "INSERT INTO WeeklySales (Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, TotalSales, FK_DateID) VALUES (?,?,?,?,?,?,?,?,?)"; oleDbCommand.Parameters.AddWithValue("Sunday", weeklySales.Rows[0][0]); oleDbCommand.Parameters.AddWithValue("Monday", weeklySales.Rows[0][1]); oleDbCommand.Parameters.AddWithValue("Tuesday", weeklySales.Rows[0][2]); oleDbCommand.Parameters.AddWithValue("Wednesday", weeklySales.Rows[0][3]); oleDbCommand.Parameters.AddWithValue("Thursday", weeklySales.Rows[0][4]); oleDbCommand.Parameters.AddWithValue("Friday", weeklySales.Rows[0][5]); oleDbCommand.Parameters.AddWithValue("Saturday", weeklySales.Rows[0][6]); oleDbCommand.Parameters.AddWithValue("TotalSales", weeklySales.Rows[0][7]); oleDbCommand.Parameters.AddWithValue("DateID", dateId); oleDbCommand.ExecuteNonQuery(); oleDbTransaction.Commit(); } catch (OleDbException e) { MessageBox.Show(e.Message); oleDbTransaction?.Rollback(); } } public int GetSupplierId(string supplierName) { var dbT = new DatabaseTracker(); var supplierId = 0; var oleDbConnection = new OleDbConnection(dbT.DatabaseConnectionString); var oleDbCommand = new OleDbCommand { Connection = oleDbConnection, CommandText = "SELECT Supplier.ID FROM Supplier WHERE SupplierName = ?" }; oleDbCommand.Parameters.AddWithValue("eh", supplierName); try { oleDbConnection.Open(); var reader = oleDbCommand.ExecuteReader(); while (reader != null && reader.Read()) { supplierId = int.Parse(reader[0].ToString()); } } catch (OleDbException e) { MessageBox.Show(e.Message); } return supplierId; } public int GetAdSpecialId(int adSpecialId) { var id = 0; var dbT = new DatabaseTracker(); var dbR = new DatabaseReader(); //Get a new ID number for the date supplied. var oleDbConnection = new OleDbConnection(_connectionString); var oleDbCommand = new OleDbCommand { Connection = oleDbConnection, CommandText = "SELECT GroupCategory.GroupDescription FROM GroupCategory WHERE GroupCategory.ID = ?" }; oleDbCommand.Parameters.AddWithValue("eh", adSpecialId); try { oleDbConnection.Open(); var reader = oleDbCommand.ExecuteReader(); string adSpecialText = ""; while (reader != null && reader.Read()) { adSpecialText = reader[0].ToString(); } oleDbCommand.Parameters.Clear(); oleDbCommand.Connection.Close(); var spam = new OleDbConnection(dbT.DatabaseConnectionString); var newSpam = new OleDbCommand { Connection = spam, CommandText = "SELECT AdSpecialName.ID FROM AdSpecialName WHERE AdSpecialName.AdSpecialName = ?" }; spam.Open(); newSpam.Parameters.AddWithValue("text", adSpecialText); reader?.Close(); reader = newSpam.ExecuteReader(); while (reader != null && reader.Read()) { id = int.Parse(reader[0].ToString()); } reader?.Close(); } catch (OleDbException e) { MessageBox.Show(e.Message); throw; } return id; } public string RetrieveAdItemId(string adItemName) { var dbT = new DatabaseTracker(); var dbR = new DatabaseReader(); return dbR.RetrieveAdItemId(adItemName, dbT.DatabaseConnectionString); } private int GetDateIdByDateString(string dateString) { var dateId = 0; var oleDbCommand = new OleDbCommand() { CommandText = "SELECT WeekEnding.ID FROM WeekEnding WHERE WeekEnding.EndOfWeekDate = ?" }; oleDbCommand.Parameters.AddWithValue("DateString", dateString); var connection = new OleDbConnection(_connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { connection.Open(); using (var reader = oleDbCommand.ExecuteReader()) { while (reader != null && reader.Read()) { dateId = int.Parse(reader[0].ToString()); } } } } return dateId; } private DataTable ReturnProjections(int dateId) { var dataTable = new DataTable(); var oleDbCommand = new OleDbCommand { CommandText = "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("DateID", dateId); var connection = new OleDbConnection(_connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { connection.Open(); using (var dataAdapter = new OleDbDataAdapter(oleDbCommand)) { dataAdapter.Fill(dataTable); } } } return dataTable; } public DataTable ReturnInventory(int dateId) { var dataTable = new DataTable(); var oleDbCommand = new OleDbCommand() { CommandText = "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("DateID", dateId); var connection = new OleDbConnection(_connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { connection.Open(); using (var dataAdapter = new OleDbDataAdapter(oleDbCommand)) { dataAdapter.Fill(dataTable); } } } return dataTable; } public DataTable ReturnActualSales(int dateId) { var dataTable = new DataTable(); var oleDbCommand = new OleDbCommand() { CommandText = "SELECT AdItem.AdItem, APC.ActualSold, APC.ActualSalePrice, APC.ActualTotalSales, APC.ActualCost, APC.ActualProfitReturn, APC.ActualTotalProfitReturn, 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("DateID", dateId); var connection = new OleDbConnection(_connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { connection.Open(); using (var dataAdapter = new OleDbDataAdapter(oleDbCommand)) { dataAdapter.Fill(dataTable); } } } return dataTable; } public DataTable ReturnInvoiceTable(int dateId) { var dataTable = new DataTable(); var oleDbCommand = new OleDbCommand() { CommandText = "SELECT Invoice.InvoiceDate, Supplier.SupplierName, Invoice.InvoiceNumber, Invoice.InvoiceNetAmountAtCost, Invoice.InvoiceNetAmount, Invoice.InvoiceNote FROM (Supplier INNER JOIN Invoice ON Supplier.ID = Invoice.FK_Supplier) WHERE FK_DateID = ?" }; oleDbCommand.Parameters.AddWithValue("DateID", dateId); var connection = new OleDbConnection(_connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { using (var adapter = new OleDbDataAdapter(oleDbCommand)) { adapter.Fill(dataTable); } } } return dataTable; } public DataTable ReturnWeeklySalesFromDateId(int dateId) { var dataTable = new DataTable(); var oleDbCommand = new OleDbCommand() { CommandText = "SELECT WeeklySales.Sunday, WeeklySales.Monday, WeeklySales.Tuesday, WeeklySales.Wednesday, WeeklySales.Thursday, WeeklySales.Friday, WeeklySales.Saturday, WeeklySales.TotalSales FROM WeeklySales WHERE FK_DateID = ?" }; oleDbCommand.Parameters.AddWithValue("DateID", dateId); var connection = new OleDbConnection(_connectionString); oleDbCommand.Connection = connection; using (connection) { using (oleDbCommand) { connection.Open(); using (var dataAdapter = new OleDbDataAdapter(oleDbCommand)) { dataAdapter.Fill(dataTable); } } } return dataTable; } } }