176 lines
7.4 KiB
C#
176 lines
7.4 KiB
C#
using System;
|
|
using System.Data.Entity.Infrastructure;
|
|
using System.Linq;
|
|
using System.Transactions;
|
|
using System.Windows.Forms;
|
|
using AdvertisingProfitControlData;
|
|
|
|
namespace AdvertsingProfitControl
|
|
{
|
|
public partial class FrmManageSuppliers : Form
|
|
{
|
|
private bool _isUpdating;
|
|
|
|
public FrmManageSuppliers()
|
|
{
|
|
InitializeComponent();
|
|
newSupplierTextBox.TextChanged += UpdateButtonOnTextChanged;
|
|
suppliersListBox.ItemSelectionChanged += UpdateSupplierFields;
|
|
var columnHeader = new ColumnHeader
|
|
{
|
|
Name = "SupplierHeaderColumn",
|
|
Width = Width / 2
|
|
};
|
|
suppliersListBox.Columns.Add(columnHeader);
|
|
RefreshSupplierListing();
|
|
}
|
|
|
|
private void UpdateSupplierFields(object sender, ListViewItemSelectionChangedEventArgs e)
|
|
{
|
|
newSupplierTextBox.Text = ((Supplier)e.Item.Tag).Name;
|
|
descriptionTextBox.Text = ((Supplier)e.Item.Tag).Description;
|
|
_isUpdating = true;
|
|
deleteSupplierButton.Enabled = true;
|
|
registerSupplierButton.Text = @"Update Supplier";
|
|
newSupplierLabel.Text = @"Update Supplier:";
|
|
}
|
|
|
|
private void UpdateButtonOnTextChanged(object sender, EventArgs e)
|
|
{
|
|
if (_isUpdating && newSupplierTextBox.Text.Length == 0)
|
|
{
|
|
_isUpdating = false;
|
|
descriptionTextBox.Text = string.Empty;
|
|
registerSupplierButton.Text = @"Register Supplier";
|
|
newSupplierLabel.Text = @"Register New Supplier:";
|
|
}
|
|
registerSupplierButton.Enabled = newSupplierTextBox.Text.Length > 0;
|
|
}
|
|
|
|
private void RefreshSupplierListing()
|
|
{
|
|
suppliersListBox.Items.Clear();
|
|
var db = new AdvertisingProfitControlDbContext();
|
|
var suppliers = db.Suppliers.Select(x => x).OrderBy(x => x.Name);
|
|
var supplierCount = 0;
|
|
foreach (var supplier in suppliers)
|
|
{
|
|
var item = new ListViewItem
|
|
{
|
|
Text = supplier.Name,
|
|
Tag = supplier
|
|
};
|
|
suppliersListBox.Items.Add(item);
|
|
supplierCount++;
|
|
}
|
|
|
|
suppliersListBox.Columns[0].Text = supplierCount > 0 ? @"Current Suppliers:" : @"No Suppliers to Display";
|
|
deleteSupplierButton.Enabled = false;
|
|
newSupplierTextBox.Text = string.Empty;
|
|
descriptionTextBox.Text = string.Empty;
|
|
}
|
|
|
|
private void registerSupplierButton_Click(object sender, EventArgs e)
|
|
{
|
|
var db = new AdvertisingProfitControlDbContext();
|
|
if (!_isUpdating)
|
|
{
|
|
if (!db.Suppliers.Any(x => x.Name == newSupplierTextBox.Text))
|
|
{
|
|
var supplier = new Supplier()
|
|
{
|
|
Name = newSupplierTextBox.Text,
|
|
Description = descriptionTextBox.Text
|
|
};
|
|
db.Suppliers.Add(supplier);
|
|
try
|
|
{
|
|
db.SaveChanges();
|
|
informationLabel.Text = @"Registered '" + Environment.NewLine + supplier.Name + Environment.NewLine + @"' successfully.";
|
|
}
|
|
catch (DbUpdateException ex)
|
|
{
|
|
informationLabel.Text = @"Failed to register '" + Environment.NewLine + supplier.Name + @"'." + Environment.NewLine +
|
|
ex.Message;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
MessageBox.Show(@"Supplier '" + newSupplierTextBox.Text + @"' already exists.",
|
|
@"Duplicate Entry", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
|
|
newSupplierTextBox.Text = string.Empty;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var item = suppliersListBox.SelectedItems[0];
|
|
var index = ((Supplier)item.Tag).Id;
|
|
var supplier = db.Suppliers.SingleOrDefault(x => x.Id == index);
|
|
if (supplier == null)
|
|
{
|
|
informationLabel.Text = @"Failed to retrieve " + Environment.NewLine + @"supplier ID.";
|
|
return;
|
|
}
|
|
supplier.Name = newSupplierTextBox.Text;
|
|
supplier.Description = descriptionTextBox.Text;
|
|
db.SaveChanges();
|
|
informationLabel.Text = @"Updated '" + Environment.NewLine + newSupplierTextBox.Text + Environment.NewLine + @"' successfully.";
|
|
}
|
|
RefreshSupplierListing();
|
|
}
|
|
|
|
private void deleteSupplierButton_Click(object sender, EventArgs e)
|
|
{
|
|
var item = suppliersListBox.SelectedItems[0];
|
|
var oldSupplier = (Supplier)item.Tag;
|
|
var db = new AdvertisingProfitControlDbContext();
|
|
var supplier = db.Suppliers.Single(x => x.Id == oldSupplier.Id);
|
|
//Check to see if the ad special is used by other tables.
|
|
if (supplier.Invoices.Count > 0)
|
|
{
|
|
//If so, display a warning to the user about the potential data loss.
|
|
var result =
|
|
MessageBox.Show(
|
|
supplier.Invoices.Count +
|
|
@" reference(s) to this supplier found. Do you want to delete these records? This can not be undone.",
|
|
@"References to " + oldSupplier.Name + @" Found", MessageBoxButtons.YesNoCancel,
|
|
MessageBoxIcon.Question);
|
|
if (result != DialogResult.Yes) return;
|
|
//Perform the necessary operations to remove all references to the key word.
|
|
using (var scope = new TransactionScope())
|
|
{
|
|
try
|
|
{
|
|
db.Invoices.RemoveRange(db.Invoices.Where(x => x.FkSupplierId == oldSupplier.Id));
|
|
db.Suppliers.Remove(supplier);
|
|
db.SaveChanges();
|
|
scope.Complete();
|
|
informationLabel.Text = @"Removed '" + Environment.NewLine + oldSupplier.Name +
|
|
Environment.NewLine + @"' successfully.";
|
|
}
|
|
catch (DbUpdateException ex)
|
|
{
|
|
informationLabel.Text = @"Failed to remove " + Environment.NewLine + oldSupplier.Name + @"." +
|
|
Environment.NewLine + ex.Message;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
try
|
|
{
|
|
db.Suppliers.Remove(supplier);
|
|
db.SaveChanges();
|
|
informationLabel.Text = @"Removed '" + Environment.NewLine + oldSupplier.Name +
|
|
Environment.NewLine + @"' successfully.";
|
|
}
|
|
catch (DbUpdateException ex)
|
|
{
|
|
informationLabel.Text = @"Failed to remove " + Environment.NewLine + oldSupplier.Name + @"." + Environment.NewLine + ex.Message;
|
|
}
|
|
}
|
|
RefreshSupplierListing();
|
|
}
|
|
}
|
|
}
|