Cleaned up the table trimming methods. Group creation now proper marks rows as dirty when row attribute changes. Projections table processes successfully on the new modify record form.

This commit is contained in:
2017-01-20 22:46:48 -06:00
parent 9fa2e3c44a
commit 43bf07c212
10 changed files with 651 additions and 245 deletions
+10 -159
View File
@@ -1174,7 +1174,7 @@ namespace AdvertsingProfitControl
{
//Grab the DataGirdView that fired the event and make it into a local variable.
var dataGridView = ((DataGridView)sender);
var userInput = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString();
var userInput = dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].EditedFormattedValue.ToString().Trim();
//TODO: Write a custom parsing engine for detecting when bins are entered.
var textInfo = new CultureInfo("en-US", false).TextInfo;
//Check for isNewRow if it is, return no need to check it for anything.
@@ -1246,6 +1246,7 @@ namespace AdvertsingProfitControl
else if (userInput != _beginningCellValue)
{
dataGridView.Rows[e.RowIndex].Cells[(int)InventoryTableColumns.IsDirty].Value = true;
dataGridView.Rows[e.RowIndex].HeaderCell.Style.BackColor = ApplicationColors.PendingEdit;
}
//Check to see if the current column is the ad item column.
switch (e.ColumnIndex)
@@ -1278,7 +1279,12 @@ namespace AdvertsingProfitControl
break;
default:
//Purely here for protection against parsing the Boolean columns by mistake.
if (e.ColumnIndex == (int)InventoryTableColumns.Id || e.ColumnIndex >= (int)InventoryTableColumns.IsHeaderRow) { return; }
if (e.ColumnIndex == (int)InventoryTableColumns.Id || e.ColumnIndex >= (int)InventoryTableColumns.IsHeaderRow) return;
if (userInput == string.Empty)
{
dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = userInput;
return;
}
//This Reg-ex pattern will match any number followed by the word bin(s), to allow specifying the number of bins of product were ordered.
var inventoryStringCheck = new Regex(@"^[0-9]{1,2} \bbin(s){0,1}\b", RegexOptions.IgnoreCase);
@@ -1294,7 +1300,7 @@ namespace AdvertsingProfitControl
}
double parsedNumber;
//Try parsing the text entered as a number and if that fails then break out and clear the value entered.
if (userInput != "" && double.TryParse(userInput, out parsedNumber))
if (userInput != string.Empty && double.TryParse(userInput, out parsedNumber))
{
//Add the value to the cell.
dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = userInput;
@@ -1302,7 +1308,7 @@ namespace AdvertsingProfitControl
return;
}
//Prevent the user from being bombarded by message boxes. All validation has been completed at this point so there's nothing to worry about.
if (userInput != "")
if (userInput != string.Empty)
{
MessageBox.Show(@"Non numeric characters in column " + (e.ColumnIndex + 1) + @" are not allowed.", @"Invalid Characters Detected");
dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = "";
@@ -2107,14 +2113,6 @@ namespace AdvertsingProfitControl
if (dbW.InsertIntoWeekEnding(weekEndingCalendar.SelectionStart.ToString("d")))
{
dateId = dbR.RetrieveDateIdByDateString(weekEndingCalendar.SelectionStart.ToString("d"), dbT.DatabaseConnectionString);
//Now if its still zero (0) then that means something went really wrong and failed to insert.
if (dateId == 0)
{
MessageBox.Show(
@"Failed to retrieve date ID after supposedly inserting the date into the database.",
@"Failed To Get Date ID", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
else
{
@@ -2465,76 +2463,6 @@ namespace AdvertsingProfitControl
return TrimmingOperationResult.FailedToTrim;
}
}
//Check for repeated ad items in the ad special section
if (_adSpecialIndex != -1 && row.Index > _adSpecialIndex)
{
//Attempt to grab the index of an ad item, if it is not found then the return value is -1.
var repeatedItemIndex = _usedAdItems[0].FindIndex(x => x == row.Cells[(int)SalesTableColumns.AdItem].EditedFormattedValue.ToString());
//Skip checking this row if an index is found, and use the values in the row at the previous index found.
if (repeatedItemIndex != -1)
{
//Add the values to their respective data table.
if (rowIdNumber == 0)
{
//This table is full of data not in the database so the ID column isn't needed.
var newRow = new object[11];
newRow[0] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.Sold].EditedFormattedValue.ToString();//Sold, is string
newRow[1] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.SalePrice].EditedFormattedValue.ToString();//SalePrice, is string
newRow[2] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalSales].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalSales].EditedFormattedValue.ToString());//TotalSales, must be a number
newRow[3] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.Cost].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.Cost].EditedFormattedValue.ToString());//Cost, must be a number
newRow[4] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.ProfitReturn].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.ProfitReturn].EditedFormattedValue.ToString());//ProfitReturn, must be a number
newRow[5] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalProfitReturn].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalProfitReturn].EditedFormattedValue.ToString());//TotalProfitReturn, must be a number
newRow[6] = adItemId;
if ((bool)dataGridView.Rows[repeatedItemIndex].Cells[(int) SalesTableColumns.IsHeaderRow].Value)
{
newRow[7] = 1;
}
else if ((bool)dataGridView.Rows[repeatedItemIndex].Cells[(int) SalesTableColumns.IsMemberRow].Value)
{
newRow[7] = 2;
}
else
{
newRow[7] = 0;
}
newRow[8] = adSpecialId;
newRow[9] = row.Index; //"Subtract" one since we don't need to acknowledge the Ad Special Row's existence.
newRow[10] = dateId;
insertNewTable.Rows.Add(newRow);
continue;
}
else
{
//This table is full of data that is already in the database.
var newRow = new object[11];
newRow[0] = rowIdNumber;
newRow[1] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.Sold].EditedFormattedValue.ToString();//Sold, is string
newRow[2] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.SalePrice].EditedFormattedValue.ToString();//SalePrice, is string
newRow[3] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalSales].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalSales].EditedFormattedValue.ToString());//TotalSales, must be a number
newRow[4] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.Cost].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.Cost].EditedFormattedValue.ToString());//Cost, must be a number
newRow[5] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.ProfitReturn].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.ProfitReturn].EditedFormattedValue.ToString());//ProfitReturn, must be a number
newRow[6] = dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalProfitReturn].EditedFormattedValue.ToString() == "" ? 0 : double.Parse(dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.TotalProfitReturn].EditedFormattedValue.ToString());//TotalProfitReturn, must be a number
newRow[7] = adItemId;
if ((bool)dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.IsHeaderRow].Value)
{
newRow[8] = 1;
}
else if ((bool)dataGridView.Rows[repeatedItemIndex].Cells[(int)SalesTableColumns.IsMemberRow].Value)
{
newRow[8] = 2;
}
else
{
newRow[8] = 0;
}
newRow[9] = adSpecialId;
newRow[10] = row.Index; //"Subtract" one since we don't need to acknowledge the Ad Special Row's existence.
newRow[11] = dateId;
insertNewTable.Rows.Add(newRow);
continue;
}
}
}
//Determine the row's attribute.
var rowAttribute = 0; //Zero (0) means no grouping, its not a header nor a member.
if ((bool)row.Cells[(int)SalesTableColumns.IsHeaderRow].Value && !(bool)row.Cells[(int)SalesTableColumns.IsMemberRow].Value)
@@ -2597,13 +2525,6 @@ namespace AdvertsingProfitControl
newRow[11] = dateId;
updateExistingTable.Rows.Add(newRow);
}
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "Row Dump for row number " + (row.Index + 1) + ".");
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "ID : " + rowIdNumber + " Sold: " + row.Cells[(int)SalesTableColumns.Sold].EditedFormattedValue);
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "Sale Price : " + row.Cells[(int)SalesTableColumns.SalePrice].EditedFormattedValue + " Total Sales: " + row.Cells[(int)SalesTableColumns.TotalSales].EditedFormattedValue);
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "Cost: " + row.Cells[(int)SalesTableColumns.Cost].EditedFormattedValue + " Profit Return: " + row.Cells[(int)SalesTableColumns.ProfitReturn].EditedFormattedValue);
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "Total Profit Return: " + row.Cells[(int)SalesTableColumns.TotalProfitReturn].EditedFormattedValue + " Ad Item ID: " + adItemId);
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "Row Attribute: " + rowAttribute + " Ad Special ID: " + adSpecialId);
//LogConsole.WriteToLog(FrmLogConsole.Level.Verbose, "Row Position: " + row.Index + (_adSpecialIndex != -1 && row.Index > _adSpecialIndex ? 1 : 0) + " Date ID: " + dateId);
}
if (insertNewTable.Rows.Count == 0 && updateExistingTable.Rows.Count == 0)
@@ -2698,76 +2619,6 @@ namespace AdvertsingProfitControl
return TrimmingOperationResult.FailedToTrim;
}
}
//Check for repeated ad items in the ad special section
if (_adSpecialIndex != -1 && row.Index > _adSpecialIndex)
{
//Attempt to grab the index of an ad item, if it is not found then the return value is -1.
var repeatedItemIndex =
_usedAdItems[0].FindIndex(x => x == row.Cells[(int)InventoryTableColumns.AdItem].EditedFormattedValue.ToString());
//Skip checking this row if an index is found, and use the values in the row at the previous index found.
if (repeatedItemIndex != -1)
{
//Add the values to their respective data table.
if (rowIdNumber == 0)
{
//This table is full of data not in the database so the ID column isn't needed.
//0:Beginning Inventory 1:Received 2:Total Inventory 3:Ending Inventory
//4:AdItemID 5:RowAttribute 6:GroupID 7:RowPosition 8:DateID
var newRow = new object[9];
newRow[0] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.BeginningInventory].EditedFormattedValue.ToString();//Sold, is string
newRow[1] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.Recieved].EditedFormattedValue.ToString();//SalePrice, is string
newRow[2] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int) InventoryTableColumns.Total].EditedFormattedValue.ToString(); //Total Inventory is string
newRow[3] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.EndingInventory].EditedFormattedValue.ToString();//Ending Inventory, is string
newRow[4] = adItemId;
if ((bool)inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.IsHeaderRow].Value)
{
newRow[5] = 1;
}
else if ((bool)inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.IsMemberRow].Value)
{
newRow[5] = 2;
}
else
{
newRow[5] = 0;
}
newRow[6] = adSpecialId;
newRow[7] = row.Index; //"Subtract" one since we don't need to acknowledge the Ad Special Row's existence.
newRow[8] = dateId;
insertNewTable.Rows.Add(newRow);
continue;
}
else
{
//This table is full of data that is already in the database.
//0:ID 1:BeginningInventory 2:Received 3:TotalInventory 4:EndingInventory
//5:AdItemID 6:RowAttribute 7:GroupID 8:RowPosition 9:DateID
var newRow = new object[10];
newRow[0] = rowIdNumber;
newRow[1] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.BeginningInventory].EditedFormattedValue.ToString();//Sold, is string
newRow[2] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.Recieved].EditedFormattedValue.ToString();//SalePrice, is string
newRow[3] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.Total].EditedFormattedValue.ToString(); //Total Inventory is string
newRow[4] = inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.EndingInventory].EditedFormattedValue.ToString();//Ending Inventory, is string
newRow[5] = adItemId;
if ((bool)inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.IsHeaderRow].Value)
{
newRow[6] = 1;
}
else if ((bool)inventoryDataGridView.Rows[repeatedItemIndex].Cells[(int)InventoryTableColumns.IsMemberRow].Value)
{
newRow[6] = 2;
}
else
{
newRow[6] = 0;
}
newRow[7] = adSpecialId;
newRow[8] = row.Index; //"Subtract" one since we don't need to acknowledge the Ad Special Row's existence.
newRow[9] = dateId;
continue;
}
}
}
//Determine the row's attribute.
var rowAttribute = 0; //Zero (0) means no grouping, its not a header nor a member.
if ((bool)row.Cells[(int)InventoryTableColumns.IsHeaderRow].Value && !(bool)row.Cells[(int)InventoryTableColumns.IsMemberRow].Value)