diff --git a/AdvertsingProfitControl/APCDatabase Template Script.sql b/AdvertsingProfitControl/APCDatabase Template Script.sql index e3c4e6d..f953521 100644 --- a/AdvertsingProfitControl/APCDatabase Template Script.sql +++ b/AdvertsingProfitControl/APCDatabase Template Script.sql @@ -1,4 +1,4 @@ ---File Version: 1.2.0.0 for SQL Server +--File Version: 1.2.1.0 for SQL Server --Purpose: Creates an empty database template in SQL for the Advertising Profit Control software; master template. --Notes: This version does not implement any table relationships, its just flat data tables. -- Currency will be represented with DECIMAL(19,2) as the standard. From stackoverflow: @@ -9,6 +9,7 @@ --Versions: -- 1.0.0.0: Initial script version. -- 1.2.0.0: Changed column names that produced duplicate names when C# code is generated by Entity Framework (i.e. Aditem becomes AdItem1). +-- 1.2.1.0: Changed Invoice Number data type to VARCHAR(256) to reduce the risk of to large of number being used for int32 in C#. --Create the database called "AdvertisingProfitControl". CREATE DATABASE AdvertisingProfitControl @@ -111,7 +112,7 @@ CREATE TABLE Invoices ( Id INTEGER IDENTITY PRIMARY KEY, --The IDENTITY key word in SQL tells the engine to create a unique number when a record is added. InvoiceDate DATE NOT NULL, -InvoiceNumber INTEGER NOT NULL, +InvoiceNumber VARCHAR(256) NOT NULL, InvoiceNetAmountAtCost DECIMAL(19,2), InvoiceNetAmount DECIMAL(19,2), InvoiceNote VARCHAR(256), @@ -165,9 +166,8 @@ CREATE TABLE CostAnalysis ( Id INTEGER IDENTITY PRIMARY KEY, --The IDENTITY key word in SQL tells the engine to create a unique number when a record is added. SalesPerManHour DECIMAL(19,2), ---Allows percentages between %1000.00 (10,000 percent) and %0.1235. DECIMAL(x,y) x is the total number of digits ---you want to represent and y is the number of digits to display after the decimal point. -SalaryPercentage DECIMAL(6,6), --The percentage of the manager's salary that was made on this week's sale items. +--DECIMAL(x,y) x is the total number of digits you want to represent and y is the number of digits to display after the decimal point. +SalaryPercentage DECIMAL(19, 2), --The percentage of the manager's salary that was made on this week's sale items. SalaryDollar DECIMAL(19,2), -- Supplies DECIMAL(19,2), --Total of costs from invoices (?). FkDateId INTEGER NOT NULL FOREIGN KEY REFERENCES WeekEndingDates(Id) diff --git a/AdvertsingProfitControl/DebugDatabaseConverter.cs b/AdvertsingProfitControl/DebugDatabaseConverter.cs index be10c15..1b10b2b 100644 --- a/AdvertsingProfitControl/DebugDatabaseConverter.cs +++ b/AdvertsingProfitControl/DebugDatabaseConverter.cs @@ -4,11 +4,13 @@ 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; namespace AdvertsingProfitControl @@ -100,253 +102,331 @@ namespace AdvertsingProfitControl var actualSales = ReturnActualSales(oldDateId); var invoices = ReturnInvoiceTable(oldDateId); var weeklySales = ReturnWeeklySalesFromDateId(oldDateId); + var dbR = new DatabaseReader(); + var taxable = dbR.ReturnTaxableFromDateId(oldDateId, _connectionString); var comment = GetComments(oldDateId); - MassiveWriteFunction(date.ToString(), projectionsTable, inventoryTable, actualSales, invoices, weeklySales, comment); + var costs = dbR.ReturnCostAnalysis(oldDateId, _connectionString); + MassiveWriteFunction(date.ToString(), projectionsTable, inventoryTable, actualSales, invoices, weeklySales, taxable, costs, comment); } } - private void MassiveWriteFunction(string dateString, DataTable projections, DataTable inventory, DataTable actualSales, DataTable invoice, DataTable weeklySales, string comments) + private void MassiveWriteFunction(string dateString, DataTable projections, DataTable inventory, DataTable actualSales, DataTable invoice, DataTable weeklySales, DataTable taxableTable, DataTable costOfSales, string comments) { - var dbT = new DatabaseTracker(); - //Get a new ID number for the date supplied. - var oleDbConnection = new OleDbConnection(dbT.DatabaseConnectionString); - var oleDbCommand = new OleDbCommand - { - Connection = oleDbConnection - }; - OleDbTransaction oleDbTransaction = null; + //var dbT = new DatabaseTracker(); + ////Get a new ID number for the date supplied. + //var oleDbConnection = new OleDbConnection(dbT.DatabaseConnectionString); + //var oleDbCommand = new OleDbCommand + //{ + // Connection = oleDbConnection + //}; 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) + using (var transaction = new TransactionScope()) { - 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("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(); - } + var db = new AdvertisingProfitControlModel(); + var date = new WeekEndingDate {EndingDate = DateTime.Parse(dateString)}; + if (db.WeekEndingDates.Any(x => x.EndingDate == date.EndingDate)) + { + date = db.WeekEndingDates.First(x => x.EndingDate == date.EndingDate); + } + else + { + 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(); + for (var rowIndex = 0; rowIndex < projections.Rows.Count; rowIndex++) + { + var projectionedSale = new Projection(); + var adItem = new AdItem(); + var adItemId = 0; + //var id = int.Parse(projections.Rows[rowIndex][0].ToString()); + var spam = projections.Rows[rowIndex][0].ToString(); + if (db.AdItems.Any(x => x.Name == spam)) + { + //Exists + adItem = db.AdItems.First(x => x.Name == spam); + adItemId = adItem.Id; + } + else + { + //Doesn't + adItem.Name = projections.Rows[rowIndex][0].ToString(); + db.AdItems.Add(adItem); + adItemId = adItem.Id; - //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(); - } + } + projectionedSale.Sold = projections.Rows[rowIndex][1].ToString(); + projectionedSale.SalePrice = projections.Rows[rowIndex][2].ToString(); + projectionedSale.TotalSales = decimal.Parse(projections.Rows[rowIndex][3].ToString()); + projectionedSale.Cost = decimal.Parse(projections.Rows[rowIndex][4].ToString()); + projectionedSale.ProfitReturn = decimal.Parse(projections.Rows[rowIndex][5].ToString()); + 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]; + 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 + for (var i = 0; i < inventory.Rows.Count; i++) + { + var inventoryObject = new Inventory(); + AdItem adItem; + var adItemId = 0; + var spam = actualSales.Rows[i][0].ToString(); + if (db.AdItems.Any(x => x.Name == spam)) + { + //Exists + adItem = db.AdItems.First(x => x.Name == spam); + adItemId = adItem.Id; + } + inventoryObject.BeginningInventory = inventory.Rows[i][1].ToString(); + inventoryObject.Recieved = inventory.Rows[i][2].ToString(); + inventoryObject.TotalInventory = inventory.Rows[i][3].ToString(); + 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()); + 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(); + } - 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(); + //actual sales + 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 = actualSales.Rows[rowIndex][0].ToString(); + if (db.AdItems.Any(x => x.Name == spam)) + { + //Exists + adItem = db.AdItems.First(x => x.Name == spam); + adItemId = adItem.Id; + } + //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.Clear(); - oleDbCommand.CommandText = "INSERT INTO Comment (Comment, FK_DateID) VALUES (?, ?)"; - oleDbCommand.Parameters.AddWithValue("Com", comments); - oleDbCommand.Parameters.AddWithValue("FK", dateId); - oleDbCommand.ExecuteNonQuery(); - oleDbTransaction.Commit(); + //SELECT Projections.ID, AdItem.AdItem, Projections.Sold, Projections.SalePrice, Projections.TotalSales, Projections.Cost, Projections.ProfitReturn, Projections.TotalProfitReturn, Projections.RowAttribute, Projections.FK_AdSpecialGroupName FROM (AdItem INNER JOIN Projections ON AdItem.ID = Projections.FK_AdItemID) WHERE FK_DateID = ? ORDER BY RowPosition ASC + actualSale.Sold = actualSales.Rows[rowIndex][1].ToString(); + actualSale.SalePrice = actualSales.Rows[rowIndex][2].ToString(); + actualSale.TotalSales = decimal.Parse(actualSales.Rows[rowIndex][3].ToString()); + actualSale.Cost = decimal.Parse(actualSales.Rows[rowIndex][4].ToString()); + actualSale.ProfitReturn = decimal.Parse(actualSales.Rows[rowIndex][5].ToString()); + 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]; + actualSale.RowPosition = rowIndex + 1; + actualSale.FkDateId = date.Id; //db.WeekEndingDates.First(x => x.Id == dateId); + //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(); + db.ActualSales.Add(actualSale); + } + + for (var i = 0; i < invoice.Rows.Count; i++) + { + var invoiceObject = new Invoice(); + var supplier = new Supplier(); + var spam = invoice.Rows[i][1].ToString(); + if (db.Suppliers.Any(x => x.Name == spam)) + { + supplier = db.Suppliers.First(x => x.Name == spam); + } + else + { + supplier.Name = invoice.Rows[i][1].ToString(); + db.Suppliers.Add(supplier); + } + invoiceObject.InvoiceDate = DateTime.Parse(invoice.Rows[i][0].ToString()); + invoiceObject.InvoiceNumber = int.Parse(invoice.Rows[i][2].ToString()); + invoiceObject.InvoiceNetAmountAtCost = decimal.Parse(invoice.Rows[i][3].ToString()); + invoiceObject.InvoiceNetAmount = decimal.Parse(invoice.Rows[i][4].ToString()); + invoiceObject.InvoiceNote = invoice.Rows[i][5].ToString(); + invoiceObject.FkSupplierId = supplier.Id; + invoiceObject.FkDateId = date.Id; + db.Invoices.Add(invoiceObject); + // //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", supplier.Id); + // oleDbCommand.Parameters.AddWithValue("FK_DateID", dateId); + // oleDbCommand.ExecuteNonQuery(); + // oleDbCommand.Parameters.Clear(); + } + var weeklySale = new WeeklySale + { + Sunday = decimal.Parse(weeklySales.Rows[0][0].ToString()), + Monday = decimal.Parse(weeklySales.Rows[0][1].ToString()), + Tuesday = decimal.Parse(weeklySales.Rows[0][2].ToString()), + Wednesday = decimal.Parse(weeklySales.Rows[0][3].ToString()), + Thursday = decimal.Parse(weeklySales.Rows[0][4].ToString()), + Friday = decimal.Parse(weeklySales.Rows[0][5].ToString()), + Saturday = decimal.Parse(weeklySales.Rows[0][6].ToString()), + TotalSales = decimal.Parse(weeklySales.Rows[0][7].ToString()), + FkDateId = date.Id + }; + db.WeeklySales.Add(weeklySale); + //Comes from DatabaseReader class, so offset by one because zero is the ID number. + var taxable = new Taxable + { + Sunday = decimal.Parse(taxableTable.Rows[0][1].ToString()), + Monday = decimal.Parse(taxableTable.Rows[0][2].ToString()), + Tuesday = decimal.Parse(taxableTable.Rows[0][3].ToString()), + Wednesday = decimal.Parse(taxableTable.Rows[0][4].ToString()), + Thursday = decimal.Parse(taxableTable.Rows[0][5].ToString()), + Friday = decimal.Parse(taxableTable.Rows[0][6].ToString()), + Saturday = decimal.Parse(taxableTable.Rows[0][7].ToString()), + Total = decimal.Parse(taxableTable.Rows[0][8].ToString()), + FkDateId = date.Id + }; + db.Taxables.Add(taxable); + //SELECT CostOfSalesAnalysis.ID, CostOfSalesAnalysis.SalesPerManHour, CostOfSalesAnalysis.SalaryPercentage, CostOfSalesAnalysis.SalaryDollars, CostOfSalesAnalysis.Supplies FROM CostOfSalesAnalysis WHERE FK_DateID = ? + var cost = new CostAnalysi + { + SalesPerManHour = decimal.Parse(costOfSales.Rows[0][1].ToString()), + SalaryPercentage = decimal.Parse(costOfSales.Rows[0][2].ToString()), + SalaryDollar = decimal.Parse(costOfSales.Rows[0][3].ToString()), + Supplies = decimal.Parse(costOfSales.Rows[0][4].ToString()), + FkDateId = date.Id + }; + db.CostAnalysis.Add(cost); + if (!string.IsNullOrEmpty(comments)) + { + var comment = new Note + { + Remark = comments, + FkDateId = date.Id + }; + db.Notes.Add(comment); + } + //oleDbCommand.Parameters.Clear(); + //oleDbCommand.CommandText = "INSERT INTO Comment (Comment, FK_DateID) VALUES (?, ?)"; + //oleDbCommand.Parameters.AddWithValue("Com", comments); + //oleDbCommand.Parameters.AddWithValue("FK", dateId); + //oleDbCommand.ExecuteNonQuery(); + //oleDbTransaction.Commit(); + db.SaveChanges(); + transaction.Complete(); + } } catch (OleDbException e) { MessageBox.Show(e.Message); - oleDbTransaction?.Rollback(); + //oleDbTransaction?.Rollback(); } finally { - oleDbConnection.Close(); + //oleDbConnection.Close(); } } 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); - + var supplier = new Supplier(); + var db = new AdvertisingProfitControlModel(); try { - oleDbConnection.Open(); - var reader = oleDbCommand.ExecuteReader(); - while (reader != null && reader.Read()) + if (db.Suppliers.Any(x => x.Name == supplierName)) { - supplierId = int.Parse(reader[0].ToString()); + return db.Suppliers.First(x => x.Name == supplierName).Id; } + //No match + supplier.Name = supplierName; + db.Suppliers.Add(supplier); + db.SaveChanges(); + return supplier.Id; } catch (OleDbException e) { MessageBox.Show(e.Message); } - finally - { - oleDbConnection.Close(); - } - 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(); - spam.Close(); - } - catch (OleDbException e) - { - MessageBox.Show(e.Message); - throw; - } - finally - { - oleDbConnection.Close(); - } - return id; + return 0; } private string GetComments(int dateId) @@ -375,12 +455,33 @@ namespace AdvertsingProfitControl return comments; } - public string RetrieveAdItemId(string adItemName) + public string RetrieveAdItemName(int id) { - var dbT = new DatabaseTracker(); - var dbR = new DatabaseReader(); - - return dbR.RetrieveAdItemId(adItemName, dbT.DatabaseConnectionString); + var oleDbCommand = new OleDbCommand() + { + CommandText = "SELECT AdItem.AdItem FROM AdItem WHERE AdItem.ID = ?" + }; + oleDbCommand.Parameters.AddWithValue("ding", id); + var connection = new OleDbConnection(_connectionString); + oleDbCommand.Connection = connection; + var adItemName = ""; + using (connection) + { + using (oleDbCommand) + { + connection.Open(); + using (var reader = oleDbCommand.ExecuteReader()) + { + while (reader != null && reader.Read()) + { + adItemName = reader[0].ToString(); + } + } + } + connection.Close(); + } + + return adItemName; } private int GetDateIdByDateString(string dateString) @@ -418,7 +519,7 @@ namespace AdvertsingProfitControl 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" + CommandText = "SELECT AdItem.AdItem, Projections.Sold, Projections.SalePrice, Projections.TotalSales, Projections.Cost, Projections.ProfitReturn, Projections.TotalProfitReturn, Projections.RowAttribute, Projections.FK_AdSpecialGroupName FROM (AdItem INNER JOIN Projections ON AdItem.ID = Projections.FK_AdItemID) WHERE FK_DateID = ? ORDER BY RowPosition ASC" }; oleDbCommand.Parameters.AddWithValue("DateID", dateId); var connection = new OleDbConnection(_connectionString); @@ -444,7 +545,7 @@ namespace AdvertsingProfitControl 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" + CommandText = "SELECT AdItem.AdItem, Inventory.BeginningInventory, Inventory.Received, Inventory.TotalInventory, Inventory.EndingInventory, Inventory.RowAttribute, Inventory.FK_AdSpecialGroupName FROM (AdItem INNER JOIN Inventory ON AdItem.ID = Inventory.FK_AdItemID) WHERE FK_DateID = ? ORDER BY RowPosition ASC" }; oleDbCommand.Parameters.AddWithValue("DateID", dateId); var connection = new OleDbConnection(_connectionString); @@ -470,7 +571,7 @@ namespace AdvertsingProfitControl 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" + CommandText = "SELECT AdItem.AdItem, ActualSales.Sold, ActualSales.SalePrice, ActualSales.TotalSales, ActualSales.Cost, ActualSales.ProfitReturn, ActualSales.TotalProfitReturn, ActualSales.RowAttribute, ActualSales.FK_AdSpecialGroupName FROM (AdItem INNER JOIN ActualSales ON AdItem.ID = ActualSales.FK_AdItemID) WHERE FK_DateID = ? ORDER BY RowPosition ASC" }; oleDbCommand.Parameters.AddWithValue("DateID", dateId); var connection = new OleDbConnection(_connectionString);