Updated the ad item manager form to allow the user to replace one item with another item. Fixed a crash bug in the Global Class logger functions.
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
using System;
|
||||
using System.Data.Entity;
|
||||
using System.Data.Entity.Core;
|
||||
using System.Data.Entity.Infrastructure;
|
||||
using System.Linq;
|
||||
using System.Transactions;
|
||||
@@ -10,6 +12,8 @@ namespace AdvertsingProfitControl
|
||||
public partial class FrmManageAdItems : Form
|
||||
{
|
||||
private bool _isUpdating;
|
||||
private bool _replaceingReference;
|
||||
private AdItem _replacee;
|
||||
|
||||
public FrmManageAdItems()
|
||||
{
|
||||
@@ -28,12 +32,20 @@ namespace AdvertsingProfitControl
|
||||
private void FilterValueChanged(object sender, EventArgs e)
|
||||
{
|
||||
if(filterComboBox.Enabled == false) return;
|
||||
adItemsListView.Columns[0].Text = @"Current Ad Items (" + (filterComboBox.SelectedItem.ToString() == "All" ? "No Filter" : @"Filter " + filterComboBox.SelectedItem) + @"):";
|
||||
if (!_replaceingReference)
|
||||
{
|
||||
adItemsListView.Columns[0].Text = @"Current Ad Items (" + (filterComboBox.SelectedItem.ToString() == "All" ? "No Filter" : @"Filter " + filterComboBox.SelectedItem) + @"):";
|
||||
}
|
||||
else
|
||||
{
|
||||
adItemsListView.Columns[0].Text = @"Chose Replacement (" + (filterComboBox.SelectedItem.ToString() == "All" ? "No Filter" : @"Filter " + filterComboBox.SelectedItem) + @"):";
|
||||
}
|
||||
adItemsListView.Items.Clear();
|
||||
var db = new AdvertisingProfitControlDbContext();
|
||||
var adItems = db.AdItems.Select(x => x);
|
||||
foreach (var adItem in adItems)
|
||||
{
|
||||
if(_replacee != null && _replacee.Name == adItem.Name) continue;
|
||||
var item = new ListViewItem
|
||||
{
|
||||
Text = adItem.Name,
|
||||
@@ -56,20 +68,32 @@ namespace AdvertsingProfitControl
|
||||
{ adItemsListView.Items.Add(item);}
|
||||
}
|
||||
}
|
||||
newItemTextBox.Text = string.Empty;
|
||||
descriptionTextBox.Text = string.Empty;
|
||||
removeAdItemButton.Enabled = false;
|
||||
if (!_replaceingReference)
|
||||
{
|
||||
newItemTextBox.Text = string.Empty;
|
||||
descriptionTextBox.Text = string.Empty;
|
||||
removeAdItemButton.Enabled = false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private void UpdateAdItemTextFields(object sender, ListViewItemSelectionChangedEventArgs e)
|
||||
{
|
||||
newItemTextBox.Text = ((AdItem)e.Item.Tag).Name;
|
||||
descriptionTextBox.Text = ((AdItem)e.Item.Tag).Description;
|
||||
_isUpdating = true;
|
||||
removeAdItemButton.Enabled = true;
|
||||
addUpdateItemButton.Text = @"Update Ad Item";
|
||||
newItemLabel.Text = @"Update Ad Item:";
|
||||
if (!_replaceingReference)
|
||||
{
|
||||
newItemTextBox.Text = ((AdItem)e.Item.Tag).Name;
|
||||
descriptionTextBox.Text = ((AdItem)e.Item.Tag).Description;
|
||||
replaceReferencesButton.Enabled = true;
|
||||
addUpdateItemButton.Text = @"Update Ad Item";
|
||||
newItemLabel.Text = @"Update Ad Item:";
|
||||
}
|
||||
else
|
||||
{
|
||||
descriptionTextBox.Text = ((AdItem)e.Item.Tag).Name;
|
||||
addUpdateItemButton.Enabled = true;
|
||||
}
|
||||
}
|
||||
|
||||
private void NewItemTextChanged(object sender, EventArgs e)
|
||||
@@ -78,8 +102,13 @@ namespace AdvertsingProfitControl
|
||||
{
|
||||
_isUpdating = false;
|
||||
descriptionTextBox.Text = string.Empty;
|
||||
addUpdateItemButton.Text = @"Register Ad Item";
|
||||
newItemLabel.Text = @"Register New Ad Item:";
|
||||
if (!_replaceingReference)
|
||||
{
|
||||
addUpdateItemButton.Text = @"Register Ad Item";
|
||||
newItemLabel.Text = @"Register New Ad Item:";
|
||||
removeAdItemButton.Enabled = false;
|
||||
replaceReferencesButton.Enabled = false;
|
||||
}
|
||||
}
|
||||
addUpdateItemButton.Enabled = newItemTextBox.Text.Length > 0;
|
||||
}
|
||||
@@ -98,6 +127,7 @@ namespace AdvertsingProfitControl
|
||||
var numberFound = false;
|
||||
foreach (var adItem in adItems)
|
||||
{
|
||||
if(_replacee != null && _replacee.Name == adItem.Name) continue;
|
||||
var item = new ListViewItem
|
||||
{
|
||||
Text = adItem.Name,
|
||||
@@ -107,7 +137,7 @@ namespace AdvertsingProfitControl
|
||||
{
|
||||
adItemsListView.Items.Add(item);
|
||||
}
|
||||
else if (adItem.Name[0].ToString() == filter)
|
||||
else if (string.Equals(adItem.Name[0].ToString(), filter, StringComparison.CurrentCultureIgnoreCase))
|
||||
{
|
||||
adItemsListView.Items.Add(item);
|
||||
}
|
||||
@@ -143,20 +173,28 @@ namespace AdvertsingProfitControl
|
||||
filterComboBox.Enabled = false;
|
||||
filterComboBox.SelectedIndex = 0;
|
||||
}
|
||||
removeAdItemButton.Enabled = false;
|
||||
newItemTextBox.Text = string.Empty;
|
||||
descriptionTextBox.Text = string.Empty;
|
||||
if (!_replaceingReference)
|
||||
{
|
||||
removeAdItemButton.Enabled = false;
|
||||
newItemTextBox.Text = string.Empty;
|
||||
descriptionTextBox.Text = string.Empty;
|
||||
}
|
||||
filterComboBox.SelectedIndexChanged += FilterValueChanged;
|
||||
}
|
||||
|
||||
private void RemoveSelectedAdItem(object sender, EventArgs e)
|
||||
{
|
||||
if (_replaceingReference)
|
||||
{
|
||||
SetFormStateAdNewItem();
|
||||
return;
|
||||
}
|
||||
var item = adItemsListView.SelectedItems[0];
|
||||
var oldAdItem = (AdItem)item.Tag;
|
||||
var db = new AdvertisingProfitControlDbContext();
|
||||
var adItemEntry = db.AdItems.Single(x => x.Id == oldAdItem.Id);
|
||||
//Check to see if the ad special is used by other tables.
|
||||
if (adItemEntry.ActualSales.Count > 0)
|
||||
if (adItemEntry.ActualSales.Count > 0 && !_replaceingReference)
|
||||
{
|
||||
//If so, display a warning to the user about the potential data loss.
|
||||
var result =
|
||||
@@ -211,6 +249,7 @@ namespace AdvertsingProfitControl
|
||||
var db = new AdvertisingProfitControlDbContext();
|
||||
if (!_isUpdating)
|
||||
{
|
||||
newItemTextBox.Text = TextFormat.FormatAdItemText(newItemTextBox.Text);
|
||||
if (!db.AdItems.Any(x => x.Name == newItemTextBox.Text))
|
||||
{
|
||||
var adItem = new AdItem
|
||||
@@ -235,10 +274,16 @@ namespace AdvertsingProfitControl
|
||||
MessageBox.Show(@"Ad item '" + newItemTextBox.Text + @"' already exists.",
|
||||
@"Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||
newItemTextBox.Text = string.Empty;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (_replaceingReference)
|
||||
{
|
||||
PerformReplacement();
|
||||
}
|
||||
else
|
||||
{
|
||||
newItemTextBox.Text = TextFormat.FormatAdItemText(newItemTextBox.Text);
|
||||
var item = adItemsListView.SelectedItems[0];
|
||||
var index = ((AdItem)item.Tag).Id;
|
||||
var adItem = db.AdItems.SingleOrDefault(x => x.Id == index);
|
||||
@@ -247,12 +292,141 @@ namespace AdvertsingProfitControl
|
||||
informationLabel.Text = @"Failed to retrieve " + Environment.NewLine + @"ad item ID.";
|
||||
return;
|
||||
}
|
||||
adItem.Name = newItemTextBox.Text;
|
||||
adItem.Description = descriptionTextBox.Text;
|
||||
db.SaveChanges();
|
||||
informationLabel.Text = @"Updated '" + Environment.NewLine + newItemTextBox.Text + Environment.NewLine + @"' successfully.";
|
||||
if (!db.AdItems.Any(x => x.Name == newItemTextBox.Text))
|
||||
{
|
||||
adItem.Name = newItemTextBox.Text;
|
||||
adItem.Description = descriptionTextBox.Text;
|
||||
db.SaveChanges();
|
||||
informationLabel.Text = @"Updated '" + Environment.NewLine + newItemTextBox.Text + Environment.NewLine + @"' successfully.";
|
||||
}
|
||||
else
|
||||
{
|
||||
MessageBox.Show(@"Ad item '" + newItemTextBox.Text + @"' already exists.",
|
||||
@"Duplicate Name Entered", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
||||
return;
|
||||
}
|
||||
}
|
||||
RefreshAdItemListing(filterComboBox.SelectedItem.ToString());
|
||||
}
|
||||
|
||||
private void FlagFormReplaceRefrence(object sender, EventArgs e)
|
||||
{
|
||||
SetFormStateReplacingReference();
|
||||
}
|
||||
|
||||
private void PerformReplacement()
|
||||
{
|
||||
var newItem = (AdItem) adItemsListView.SelectedItems[0].Tag;
|
||||
var db = new AdvertisingProfitControlDbContext();
|
||||
var replacementCount = 0;
|
||||
var skipCount = 0;
|
||||
|
||||
try
|
||||
{
|
||||
using (var scope = new TransactionScope())
|
||||
{
|
||||
var projectionsToUpdate = db.Projections.Where(x => x.AdItem.Id == _replacee.Id);
|
||||
|
||||
foreach (var record in projectionsToUpdate)
|
||||
{
|
||||
var table = db.Projections.Where(x => x.FkDateId == record.FkDateId);
|
||||
if (table.Count(x => x.FkDateId == record.FkDateId) == 0) continue;
|
||||
record.FkAdItemId = newItem.Id;
|
||||
db.Projections.Attach(record);
|
||||
db.Entry(record).State = EntityState.Modified;
|
||||
replacementCount++;
|
||||
}
|
||||
|
||||
var inventoryToUpdate = db.Inventories.Where(x => x.AdItem.Id == _replacee.Id);
|
||||
|
||||
foreach (var record in inventoryToUpdate)
|
||||
{
|
||||
var table = db.Inventories.Where(x => x.FkDateId == record.FkDateId);
|
||||
if (table.Count(x => x.FkDateId == record.FkDateId) == 0) continue;
|
||||
record.FkAdItemId = newItem.Id;
|
||||
db.Inventories.Attach(record);
|
||||
db.Entry(record).State = EntityState.Modified;
|
||||
replacementCount++;
|
||||
}
|
||||
|
||||
var actualSalesToUpdate = db.ActualSales.Where(x => x.AdItem.Id == _replacee.Id);
|
||||
|
||||
foreach (var record in actualSalesToUpdate)
|
||||
{
|
||||
var table = db.ActualSales.Where(x => x.FkDateId == record.FkDateId);
|
||||
if (table.Count(x => x.FkDateId == record.FkDateId) == 0) continue;
|
||||
record.FkAdItemId = newItem.Id;
|
||||
db.ActualSales.Attach(record);
|
||||
db.Entry(record).State = EntityState.Modified;
|
||||
replacementCount++;
|
||||
}
|
||||
|
||||
db.SaveChanges();
|
||||
|
||||
scope.Complete();
|
||||
}
|
||||
//All completed without error so give the user the option to delete the replace.
|
||||
var result = MessageBox.Show(_replacee.Name + @" has been successfully replaced with " + newItem.Name + @". Would you like to delete " + _replacee.Name + @" from the database?", @"Replacement Completed Successfully on " + replacementCount + @" Item(s)", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
|
||||
if (result == DialogResult.Yes)
|
||||
{
|
||||
_replacee = db.AdItems.Single(x => x.Id == _replacee.Id);
|
||||
db.AdItems.Remove(_replacee);
|
||||
db.SaveChanges();
|
||||
informationLabel.Text = @"Removed " + Environment.NewLine + _replacee.Name + Environment.NewLine + @" from the database.";
|
||||
}
|
||||
SetFormStateAdNewItem();
|
||||
RefreshAdItemListing(filterComboBox.SelectedItem.ToString());
|
||||
}
|
||||
catch (EntitySqlException e)
|
||||
{
|
||||
MessageBox.Show(e.Message);
|
||||
}
|
||||
}
|
||||
|
||||
private void SetFormStateReplacingReference()
|
||||
{
|
||||
newItemTextBox.TextChanged -= NewItemTextChanged;
|
||||
adItemsListView.ItemSelectionChanged -= UpdateAdItemTextFields;
|
||||
_replaceingReference = true;
|
||||
_replacee = (AdItem)adItemsListView.SelectedItems[0].Tag;
|
||||
addUpdateItemButton.Text = @"Replace References";
|
||||
addUpdateItemButton.Enabled = false;
|
||||
newItemTextBox.Enabled = false;
|
||||
newItemLabel.Text = @"Replace";
|
||||
descriptionTextBox.Enabled = false;
|
||||
descriptionLabel.Text = @"With";
|
||||
removeAdItemButton.Text = @"Cancel";
|
||||
replaceReferencesButton.Text = @"Select Item to Replace With";
|
||||
replaceReferencesButton.Enabled = false;
|
||||
//Prevent the user from selecting the same item again.
|
||||
adItemsListView.Items.Remove(adItemsListView.SelectedItems[0]);
|
||||
if (adItemsListView.Items.Count == 0)
|
||||
{
|
||||
RefreshAdItemListing();
|
||||
}
|
||||
newItemTextBox.TextChanged += NewItemTextChanged;
|
||||
adItemsListView.ItemSelectionChanged += UpdateAdItemTextFields;
|
||||
}
|
||||
|
||||
private void SetFormStateAdNewItem()
|
||||
{
|
||||
newItemTextBox.TextChanged -= NewItemTextChanged;
|
||||
_replacee = null;
|
||||
_replaceingReference = false;
|
||||
_isUpdating = false;
|
||||
newItemTextBox.Enabled = true;
|
||||
newItemTextBox.Text = string.Empty;
|
||||
descriptionTextBox.Enabled = true;
|
||||
descriptionTextBox.Text = string.Empty;
|
||||
descriptionLabel.Text = @"Description (Optional):";
|
||||
removeAdItemButton.Text = @"Remove Selected Item";
|
||||
replaceReferencesButton.Text = @"Replace References With...";
|
||||
addUpdateItemButton.Enabled = false;
|
||||
addUpdateItemButton.Text = @"Ad New Item";
|
||||
newItemLabel.Text = @"Register New Ad Item:";
|
||||
removeAdItemButton.Enabled = false;
|
||||
replaceReferencesButton.Enabled = false;
|
||||
newItemTextBox.TextChanged += NewItemTextChanged;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user