Initial commit of version 0.9.5.2; no older versions exist for this repo.
This commit is contained in:
@@ -0,0 +1,443 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Data;
|
||||
using System.Linq;
|
||||
using System.Windows.Forms;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace AdvertsingProfitControl
|
||||
{
|
||||
public partial class FrmDeleteRecord : Form
|
||||
{
|
||||
readonly FrmLogConsole _console = FrmLogConsole.GetStaticInstance;
|
||||
private List<string> _gDateStringCollection = new List<string>();
|
||||
private string _lastComment = "";
|
||||
|
||||
public FrmDeleteRecord()
|
||||
{
|
||||
InitializeComponent();
|
||||
}
|
||||
|
||||
private void frmDeleteRecord_Load(object sender, EventArgs e)
|
||||
{
|
||||
FillDateSuggestionComboBoxes();
|
||||
BuildAndFillDataGridViews();
|
||||
|
||||
//Setup event handlers
|
||||
projectionsDataGridView.UserDeletingRow += ClearRecordFromDatabaseOnRemoving;
|
||||
inventoryDataGridView.UserDeletingRow += ClearRecordFromDatabaseOnRemoving;
|
||||
actualSalesDataGridView.UserDeletingRow += ClearRecordFromDatabaseOnRemoving;
|
||||
suppliersDataGridView.UserDeletingRow += ClearInvoiceFromDatabaseOnRemoving;
|
||||
commentsTextBox.Leave += UpdateCommentsOnLeave;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event USed: UserDeletingRow
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ClearInvoiceFromDatabaseOnRemoving(object sender, DataGridViewRowCancelEventArgs e)
|
||||
{
|
||||
var dataGridView = (DataGridView) sender;
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var databaseReader = new DatabaseReader();
|
||||
var databaseWriter = new DatabaseWriter(databaseTracker.DatabaseConnectionString);
|
||||
|
||||
var dateId = databaseReader.RetrieveDateIdByDateString(monthComboBox.Text + "/" + dayComboBox.Text + "/" + yearComboBox.Text, databaseTracker.DatabaseConnectionString);
|
||||
if (dateId == "0")
|
||||
{
|
||||
informationLabel.Text = "An error has occurred trying to obtain the ID\nfor the date " +
|
||||
monthComboBox.Text + "/" + dayComboBox.Text + "/" + yearComboBox.Text + ".";
|
||||
}
|
||||
var supplierName = dataGridView.Rows[e.Row.Index].Cells[0].EditedFormattedValue.ToString();
|
||||
var invoiceNumber = dataGridView.Rows[e.Row.Index].Cells[1].EditedFormattedValue.ToString();
|
||||
var count = databaseWriter.RemoveInvoice(invoiceNumber, dateId);
|
||||
|
||||
if (count == 1)
|
||||
{
|
||||
informationLabel.Text = "Successfully removed the invoice from " + supplierName +
|
||||
" with\nthe invoice number of " + invoiceNumber + ".";
|
||||
}
|
||||
else if(count == 0)
|
||||
{
|
||||
informationLabel.Text = "Failed to remove the invoice from " + supplierName + " from the database.";
|
||||
e.Cancel = true;
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event Used: Leave
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void UpdateCommentsOnLeave(object sender, EventArgs e)
|
||||
{
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var databaseReader = new DatabaseReader();
|
||||
var datbaseWriter = new DatabaseWriter(databaseTracker.DatabaseConnectionString);
|
||||
|
||||
if (commentsTextBox.Text == _lastComment)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var dateId =
|
||||
databaseReader.RetrieveDateIdByDateString(monthComboBox.Text + "/" + dayComboBox.Text + "/" +
|
||||
yearComboBox.Text, databaseTracker.DatabaseConnectionString);
|
||||
if (dateId == "0"){ informationLabel.Text = "unable to find date in database."; return; }
|
||||
var recordsAffected = datbaseWriter.UpdateCommentsByDateId(commentsTextBox.Text, dateId);
|
||||
if (recordsAffected == true)
|
||||
{
|
||||
informationLabel.Text = "Successfully updated the comments for the selected date.";
|
||||
}
|
||||
else
|
||||
{
|
||||
informationLabel.Text = "Failed to update the comments for the selected date.";
|
||||
}
|
||||
_lastComment = commentsTextBox.Text;
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Event Used: UserDeletingRow
|
||||
/// Clears the record in the row being deleted from the database.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void ClearRecordFromDatabaseOnRemoving(object sender, DataGridViewRowCancelEventArgs e)
|
||||
{
|
||||
var dataGridView = (DataGridView) sender;
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var databaseWriter = new DatabaseWriter(databaseTracker.DatabaseConnectionString);
|
||||
var databaseReader = new DatabaseReader();
|
||||
|
||||
var dateId = databaseReader.RetrieveDateIdByDateString(monthComboBox.Text + "/" + dayComboBox.Text + "/" + yearComboBox.Text, databaseTracker.DatabaseConnectionString);
|
||||
var adItemName = e.Row.Cells[0].EditedFormattedValue.ToString();
|
||||
var adItemId = databaseReader.RetrieveAdItemId(adItemName, databaseTracker.DatabaseConnectionString);
|
||||
var count = databaseWriter.RemoveRecord(adItemId, dateId);
|
||||
|
||||
if (count == 1)
|
||||
{
|
||||
informationLabel.Text = "Successfully removed " + adItemName + " from the database.";
|
||||
//
|
||||
projectionsDataGridView.UserDeletingRow -= ClearRecordFromDatabaseOnRemoving;
|
||||
inventoryDataGridView.UserDeletingRow -= ClearRecordFromDatabaseOnRemoving;
|
||||
actualSalesDataGridView.UserDeletingRow -= ClearRecordFromDatabaseOnRemoving;
|
||||
//Maybe make this based on tab page index.
|
||||
if (dataGridView.Name == "projectionsDataGridView")
|
||||
{
|
||||
inventoryDataGridView.Rows.RemoveAt(e.Row.Index);
|
||||
actualSalesDataGridView.Rows.RemoveAt(e.Row.Index);
|
||||
}
|
||||
else if (dataGridView.Name == "inventoryDataGridView")
|
||||
{
|
||||
projectionsDataGridView.Rows.RemoveAt(e.Row.Index);
|
||||
actualSalesDataGridView.Rows.RemoveAt(e.Row.Index);
|
||||
}
|
||||
else if (dataGridView.Name == "actualSalesDataGridView")
|
||||
{
|
||||
projectionsDataGridView.Rows.RemoveAt(e.Row.Index);
|
||||
inventoryDataGridView.Rows.RemoveAt(e.Row.Index);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
informationLabel.Text = "Failed to remove " + adItemName + " from the database.";
|
||||
e.Cancel = true;
|
||||
}
|
||||
|
||||
projectionsDataGridView.UserDeletingRow += ClearRecordFromDatabaseOnRemoving;
|
||||
inventoryDataGridView.UserDeletingRow += ClearRecordFromDatabaseOnRemoving;
|
||||
actualSalesDataGridView.UserDeletingRow += ClearRecordFromDatabaseOnRemoving;
|
||||
}
|
||||
|
||||
|
||||
private void UpdateDataGridViewInformation(object sender, EventArgs e)
|
||||
{
|
||||
string dateString = monthComboBox.Text + "/" + dayComboBox.Text + "/" + yearComboBox.Text;
|
||||
BuildAndFillDataGridViews(dateString);
|
||||
}
|
||||
|
||||
private void BuildAndFillDataGridViews(string dateString = "")
|
||||
{
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var dataBaseReader = new DatabaseReader();
|
||||
|
||||
string dateId;
|
||||
|
||||
//Check to see if a parameter has been passed.
|
||||
if (dateString == "")
|
||||
{
|
||||
//IF non were, then grab the most recent date ID from the database and use that.
|
||||
dateId = dataBaseReader.RetrieveMostRecentDateId(databaseTracker.DatabaseConnectionString);
|
||||
_console.WriteToLog(FrmLogConsole.Level.Info, dateId != "0" ? "Most recent date ID is " + dateId : "Most recent date ID is unavailable.");
|
||||
}
|
||||
else
|
||||
{
|
||||
//ELSE IF one was passed, then use it's ID to build the tables.
|
||||
dateId = dataBaseReader.RetrieveDateIdByDateString(dateString, databaseTracker.DatabaseConnectionString);
|
||||
_console.WriteToLog(FrmLogConsole.Level.Info, dateId != "0" ? "Date ID for " + dateString + " is resolved to have the ID of " + dateId + "." : "The date " + dateString + " could not be found in the database.");
|
||||
if (dateId == "0")
|
||||
{
|
||||
_gDateStringCollection.Remove(dateString);
|
||||
}
|
||||
}
|
||||
//Now check to make sure there were no errors grabbing the ID, IF there were return.
|
||||
if (dateId == "0") return;
|
||||
//Clear all DataGridViews since the date supplied is valid and in the database.
|
||||
projectionsDataGridView.DataSource = null;
|
||||
inventoryDataGridView.DataSource = null;
|
||||
actualSalesDataGridView.DataSource = null;
|
||||
suppliersDataGridView.DataSource = null;
|
||||
weeklySalesDataGridView.DataSource = null;
|
||||
//Fill the tables from the database.
|
||||
projectionsDataGridView.DataSource = CleanDataTable(dataBaseReader.ReturnProjectionsTable(dateId, databaseTracker.DatabaseConnectionString));
|
||||
inventoryDataGridView.DataSource = CleanDataTable(dataBaseReader.ReturnInventoryTable(dateId, databaseTracker.DatabaseConnectionString));
|
||||
actualSalesDataGridView.DataSource = CleanDataTable(dataBaseReader.ReturnActualSales(dateId, databaseTracker.DatabaseConnectionString));
|
||||
suppliersDataGridView.DataSource = dataBaseReader.ReturnInvoiceTable(dateId, databaseTracker.DatabaseConnectionString);
|
||||
weeklySalesDataGridView.DataSource = dataBaseReader.ReturnWeeklySalesFromDateId(dateId, databaseTracker.DatabaseConnectionString);
|
||||
|
||||
commentsTextBox.Text = dataBaseReader.RetrieveComments(dateId, databaseTracker.DatabaseConnectionString);
|
||||
if (commentsTextBox.Text.StartsWith("No comments"))
|
||||
{
|
||||
commentsTextBox.Enabled = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
commentsTextBox.Enabled = true;
|
||||
_lastComment = commentsTextBox.Text;
|
||||
}
|
||||
}
|
||||
|
||||
private DataTable CleanDataTable(DataTable table)
|
||||
{
|
||||
if (table.Columns[table.Columns.Count - 1].ColumnName == "FK_GroupID")
|
||||
{
|
||||
table.Columns.RemoveAt(table.Columns.Count - 1);
|
||||
}
|
||||
|
||||
var cleanedTable = table;
|
||||
|
||||
return cleanedTable;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Grabs all dates from the database and splits the returned strings
|
||||
/// into months, days, and years and stores them in their respective
|
||||
/// combo boxes to display to the user. Also stores the list of dates
|
||||
/// inside a class wide variable.
|
||||
/// </summary>
|
||||
private void FillDateSuggestionComboBoxes()
|
||||
{
|
||||
//Create a connection to the database reader class.
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var databaseReader = new DatabaseReader();
|
||||
//Grab the most recent date in the database.
|
||||
var mostRecentDateTime = databaseReader.RetrieveMostRecentDateString(databaseTracker.DatabaseConnectionString);
|
||||
var mostRecentDateString = mostRecentDateTime.ToString("MM/dd/yyyy");
|
||||
//Check to see if the return value is null and IF so log the error and return.
|
||||
if (mostRecentDateString == "") { _console.WriteToLog(FrmLogConsole.Level.Error, "No dates could be found in the database."); return; }
|
||||
//Otherwise, if there was a return date, split it into a array.
|
||||
var mostRecentDateParts = mostRecentDateString.Split('/');
|
||||
//Grab only the most recent years in the database (only say 2015) and fill a table with the dates. Indexes are as follows: [0] is Month, [1] is Day and [2] is Year.
|
||||
List<DateTime> dateList = databaseReader.RetrieveDateListByYear(mostRecentDateParts[2].ToString(), databaseTracker.DatabaseConnectionString);
|
||||
//Suspend the control's drawing so the user doesn't see any ugly enumeration and index changing.
|
||||
DrawingControl.SuspendDrawing(secondaryLayOutPanel);
|
||||
//Considering there was a return value for the most recent date, its safe to assume there is at least one date in the database, so clear the class's date collection.
|
||||
_gDateStringCollection.Clear();
|
||||
monthComboBox.Items.Clear();
|
||||
dayComboBox.Items.Clear();
|
||||
yearComboBox.Items.Clear();
|
||||
monthComboBox.SelectedIndexChanged -= UpdateDaysOfMonth;
|
||||
dayComboBox.SelectedIndexChanged -= UpdateDataGridViewInformation;
|
||||
yearComboBox.SelectedIndexChanged -= UpdateDaysOfMonthByYear;
|
||||
//Now spin through the oneYearDatesTable and fill the class wide object with all the dates for the most recent year.
|
||||
for (var i = 0; i < dateList.Count; i++)
|
||||
{
|
||||
var fullDateString = dateList[i].ToString("MM/dd/yyyy");
|
||||
//Check for nulls just to be paranoid.
|
||||
if (fullDateString == "")
|
||||
{
|
||||
return;
|
||||
}
|
||||
//IF the date string collection already contains the date, then continue to the next iteration.
|
||||
if (_gDateStringCollection.Contains(fullDateString))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
_gDateStringCollection.Add(fullDateString);
|
||||
}
|
||||
|
||||
var dayBasedOnMonthAndYeaRegex = new Regex("^0?" + mostRecentDateParts[0] + @"/\d{2}/" + mostRecentDateParts[2]);
|
||||
var monthBasedOnYearRegex = new Regex(@"^\d{2}/\d{2}/" + mostRecentDateParts[2]);
|
||||
for (var i = 0; i < _gDateStringCollection.Count; i++)
|
||||
{
|
||||
string[] dateArray = _gDateStringCollection[i].Split('/');
|
||||
var month = dateArray[0];
|
||||
var day = dateArray[1];
|
||||
|
||||
if (dayBasedOnMonthAndYeaRegex.IsMatch(_gDateStringCollection[i]))
|
||||
{
|
||||
dayComboBox.Items.Add(day);
|
||||
}
|
||||
if (monthBasedOnYearRegex.IsMatch(_gDateStringCollection[i]))
|
||||
{
|
||||
if (!monthComboBox.Items.Contains(month))
|
||||
{
|
||||
monthComboBox.Items.Add(month);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var yearsInDatabase = databaseReader.RetrieveUniqueYearsList(databaseTracker.DatabaseConnectionString);
|
||||
|
||||
foreach (var year in yearsInDatabase)
|
||||
{
|
||||
yearComboBox.Items.Add(year);
|
||||
}
|
||||
|
||||
if (dayComboBox.Items.Count >= 1 && yearComboBox.Items.Count >= 1 && monthComboBox.Items.Count >= 1)
|
||||
{
|
||||
monthComboBox.SelectedIndex = monthComboBox.Items.Count - 1;
|
||||
dayComboBox.SelectedIndex = dayComboBox.Items.Count - 1;
|
||||
yearComboBox.SelectedIndex = yearComboBox.Items.Count - 1;
|
||||
monthComboBox.Enabled = true;
|
||||
dayComboBox.Enabled = true;
|
||||
yearComboBox.Enabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
monthComboBox.Enabled = false;
|
||||
dayComboBox.Enabled = false;
|
||||
yearComboBox.Enabled = false;
|
||||
}
|
||||
monthComboBox.SelectedIndexChanged += UpdateDaysOfMonth;
|
||||
dayComboBox.SelectedIndexChanged += UpdateDataGridViewInformation;
|
||||
yearComboBox.SelectedIndexChanged += UpdateDaysOfMonthByYear;
|
||||
DrawingControl.ResumeDrawing(secondaryLayOutPanel);
|
||||
}
|
||||
|
||||
|
||||
private void UpdateDaysOfMonth(object sender, EventArgs e)
|
||||
{
|
||||
if (yearComboBox.SelectedIndex == -1) return;
|
||||
var year = yearComboBox.SelectedItem.ToString();
|
||||
var month = monthComboBox.SelectedItem.ToString();
|
||||
var dateParserPattern = new Regex("^" + month + @"\/\d{2}\/" + year);
|
||||
|
||||
dayComboBox.Items.Clear();
|
||||
|
||||
for (var i = 0; i < _gDateStringCollection.Count; i++)
|
||||
{
|
||||
if (dateParserPattern.IsMatch(_gDateStringCollection[i]))
|
||||
{
|
||||
var dateArray = _gDateStringCollection[i].Split('/');
|
||||
var day = dateArray[1];
|
||||
dayComboBox.Items.Add(day);
|
||||
}
|
||||
}
|
||||
|
||||
if (dayComboBox.Items.Count > 0)
|
||||
{
|
||||
dayComboBox.SelectedIndex = dayComboBox.Items.Count - 1;
|
||||
}
|
||||
}
|
||||
/// <summary>
|
||||
/// Fires when the Year combo box's index changes.
|
||||
/// </summary>
|
||||
/// <param name="sender"></param>
|
||||
/// <param name="e"></param>
|
||||
private void UpdateDaysOfMonthByYear(object sender, EventArgs e)
|
||||
{
|
||||
//Obligatory database retrieval call...
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var databaseReader = new DatabaseReader();
|
||||
//First, grab the year and the month from their respective combo boxes.
|
||||
var year = yearComboBox.SelectedItem.ToString();
|
||||
var month = monthComboBox.SelectedItem.ToString();
|
||||
//Since we can more or less be certain that nothing is null, clear the current date collection.
|
||||
_gDateStringCollection.Clear();
|
||||
var months = databaseReader.RetrieveUniqueMonthsList(year, databaseTracker.DatabaseConnectionString);
|
||||
var mostRecentMonth = months.Max();
|
||||
if (mostRecentMonth.Length == 1)
|
||||
{
|
||||
mostRecentMonth = "0" + mostRecentMonth;
|
||||
}
|
||||
var dateList = databaseReader.RetrieveDateListByYear(year, databaseTracker.DatabaseConnectionString);
|
||||
|
||||
foreach (var t in dateList)
|
||||
{
|
||||
_gDateStringCollection.Add(t.ToString("MM/dd/yyyy"));
|
||||
}
|
||||
|
||||
//Clear the month and day combo boxes and unregister their event handlers.
|
||||
dayComboBox.Items.Clear();
|
||||
monthComboBox.Items.Clear();
|
||||
monthComboBox.SelectedIndexChanged -= UpdateDaysOfMonth;
|
||||
dayComboBox.SelectedIndexChanged -= UpdateDataGridViewInformation;
|
||||
for (var i = 0; i < _gDateStringCollection.Count; i++)
|
||||
{
|
||||
var dateArray = _gDateStringCollection[i].Split('/');
|
||||
month = dateArray[0];
|
||||
//Declare the patterns to look for when enumerating the combo boxes.
|
||||
var dayBasedOnMonthAndYeaRegex = new Regex(@"^(" + mostRecentMonth + @"\/\d{2}\/" + year + ")"); //Only allows days that are actually part of the month and year.
|
||||
var day = dateArray[1];
|
||||
|
||||
if (dayBasedOnMonthAndYeaRegex.IsMatch(_gDateStringCollection[i]))
|
||||
{
|
||||
dayComboBox.Items.Add(day);
|
||||
}
|
||||
|
||||
if (!monthComboBox.Items.Contains(month))
|
||||
{
|
||||
monthComboBox.Items.Add(month);
|
||||
}
|
||||
}
|
||||
|
||||
if (dayComboBox.Items.Count > 0)
|
||||
{
|
||||
dayComboBox.SelectedIndex = dayComboBox.Items.Count - 1;
|
||||
}
|
||||
if (monthComboBox.Items.Count > 0)
|
||||
{
|
||||
monthComboBox.SelectedIndex = monthComboBox.Items.Count - 1;
|
||||
}
|
||||
|
||||
//Now re-register the event handlers
|
||||
monthComboBox.SelectedIndexChanged += UpdateDaysOfMonth;
|
||||
dayComboBox.SelectedIndexChanged += UpdateDataGridViewInformation;
|
||||
|
||||
BuildAndFillDataGridViews(monthComboBox.SelectedItem + "/" + dayComboBox.SelectedItem + "/" + year);
|
||||
}
|
||||
|
||||
private void DELETE_Click(object sender, EventArgs e)
|
||||
{
|
||||
var databaseTracker = new DatabaseTracker();
|
||||
var databaseReader = new DatabaseReader();
|
||||
var databaseWriter = new DatabaseWriter(databaseTracker.DatabaseConnectionString);
|
||||
|
||||
var result = MessageBox.Show("Are you sure you wish to delete all records for the date selected date (" + monthComboBox.Text +"/" + dayComboBox.Text + "/" + yearComboBox.Text + ")?\nThis cannot be undone.", "Purge Selected Year", MessageBoxButtons.YesNo)
|
||||
;
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
var dateId =
|
||||
databaseReader.RetrieveDateIdByDateString(monthComboBox.Text + "/" + dayComboBox.Text + "/" +
|
||||
yearComboBox.Text, databaseTracker.DatabaseConnectionString);
|
||||
var recordsAffected = databaseWriter.RemoveAllEntriesAndYearById(dateId);
|
||||
if (recordsAffected > 0)
|
||||
{
|
||||
informationLabel.Text = "Successfully removed " + recordsAffected.ToString() +
|
||||
" entries clearing all records of\n" + monthComboBox.Text + "/" + dayComboBox.Text +
|
||||
"/" + yearComboBox.Text + " from the database.";
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return;
|
||||
}
|
||||
FillDateSuggestionComboBoxes();
|
||||
BuildAndFillDataGridViews();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user