Files
advertisingprofitcontrol-alpha/AdvertsingProfitControl/DebugDatabaseConverter.cs
T

493 lines
24 KiB
C#

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<DateTime>();
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;
}
}
}