2019-10-07 16:37:47 +00:00
using System ;
using System.Collections.Generic ;
using System.ComponentModel ;
using System.Data ;
using System.Drawing ;
using System.Linq ;
using System.Text ;
using System.Threading.Tasks ;
using System.Windows.Forms ;
2019-10-14 16:59:02 +00:00
/* References */
// Using a delegate to trigger method on the customer view form
// https://www.coderslexicon.com/passing-data-between-forms-using-delegates-and-events/
2019-10-07 16:37:47 +00:00
namespace QueueSys
{
public partial class frmEmployeeView : Form
{
public frmEmployeeView ( )
{
InitializeComponent ( ) ;
}
2019-10-14 16:59:02 +00:00
// Our delegate (which "points" at any method which takes an object and EventArgs)
// Look familiar? This is the signature of most control events on a form
public delegate void SendMessage ( object obj , EventArgs e ) ;
// Here is the event we trigger to send messages out to listeners
public event SendMessage OnSendMessage ;
2019-10-07 22:30:36 +00:00
/ * Execute when program / main form loads .
2019-10-14 16:59:02 +00:00
* Pop up the customer view screen to drag onto second monitor
* creates our second form , says "attach its MessageReceived function to the event"
* /
2019-10-07 16:37:47 +00:00
private void frmEmployeeView_Load ( object sender , EventArgs e )
{
2019-10-14 16:59:02 +00:00
frmCustomerView frm = new frmCustomerView ( ) ;
OnSendMessage + = frm . MessageReceived ;
2019-10-07 16:37:47 +00:00
frm . Show ( ) ;
2019-10-15 20:04:57 +00:00
RefreshEmployeeView ( ) ;
2019-10-07 16:37:47 +00:00
}
2019-10-07 22:30:36 +00:00
/* Enable options menu. */
private void optionsToolStripMenuItem_Click ( object sender , EventArgs e )
{
2019-10-14 16:59:02 +00:00
frmOptions frm = new frmOptions ( ) ;
2019-10-07 22:30:36 +00:00
frm . Show ( ) ;
frm . Activate ( ) ;
}
// Exits the application.
private void exitAltF4ToolStripMenuItem_Click ( object sender , EventArgs e ) = > Application . Exit ( ) ;
2019-10-08 17:49:09 +00:00
private void generateReportToolStripMenuItem_Click ( object sender , EventArgs e )
{
MessageBox . Show ( "To-do: Generate excel report from SQL Database." ) ;
}
2019-10-12 06:46:15 +00:00
private void btnAdd_Click ( object sender , EventArgs e )
{
SqliteDataAccess sda = new SqliteDataAccess ( ) ;
2019-10-15 15:42:17 +00:00
ReportView evNewCx = new ReportView ( ) ;
2019-10-12 06:46:15 +00:00
evNewCx . customer_name = tbCustomerName . Text ;
evNewCx . num_bags = Int32 . Parse ( cbNumBags . Text ) ;
evNewCx . employee = tbEmployeeName . Text ;
sda . SaveCustomer ( evNewCx ) ;
2019-10-14 16:59:02 +00:00
//Invoke the delegate to update customer view.
OnSendMessage ? . Invoke ( this , e ) ;
2019-10-12 06:46:15 +00:00
tbCustomerName . Text = "" ;
cbNumBags . Text = "" ;
tbEmployeeName . Text = "" ;
MessageBox . Show ( "Customer has been added!" , "Queue System" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
2019-10-16 22:09:14 +00:00
RefreshEmployeeView ( ) ;
2019-10-12 06:46:15 +00:00
}
2019-10-15 15:42:17 +00:00
private void RefreshEmployeeView ( )
{
2019-10-16 22:09:14 +00:00
dgvEmployeeView . Rows . Clear ( ) ;
dgvEmployeeView . Refresh ( ) ;
2019-10-15 20:04:57 +00:00
// Build the row.
SqliteDataAccess sdaEvView = new SqliteDataAccess ( ) ;
List < EmployeeView > evList = new List < EmployeeView > ( ) ;
evList = sdaEvView . LoadEmployeeView ( ) ;
foreach ( EmployeeView item in evList )
{
string [ ] row = new string [ ] { item . id . ToString ( ) , item . customer_name } ;
dgvEmployeeView . Rows . Add ( row ) ;
}
DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn ( ) ;
cmb . HeaderText = "Status" ;
cmb . MaxDropDownItems = 3 ;
//Allows for dynamic adding/removing status items per
//the status lookup table in the sqlite db.
List < StatusModel > s = new List < StatusModel > ( ) ;
s = sdaEvView . LoadStatusStrings ( ) ;
foreach ( StatusModel item in s )
{
cmb . Items . Add ( item . status ) ;
}
dgvEmployeeView . Columns . Add ( cmb ) ;
//Change the status of the combobox based on the query from the db.
List < StatusModel > cxStatus = new List < StatusModel > ( ) ;
//Select the id column from the current row.
foreach ( DataGridViewRow row in dgvEmployeeView . Rows )
{
2019-10-16 22:09:14 +00:00
cxStatus = sdaEvView . GetCxStatus ( Int32 . Parse ( dgvEmployeeView . Rows [ row . Index ] . Cells [ 0 ] . Value . ToString ( ) ) ) ;
2019-10-15 20:04:57 +00:00
row . Cells [ 2 ] . Value = cxStatus [ 0 ] . status ;
}
// Add the delete button.
DataGridViewButtonColumn btn = new DataGridViewButtonColumn ( ) ;
btn . HeaderText = "Delete" ;
btn . Text = "Delete" ;
btn . Name = "btn" ;
btn . UseColumnTextForButtonValue = true ;
dgvEmployeeView . Columns . Add ( btn ) ;
}
2019-10-16 22:09:14 +00:00
2019-10-15 20:04:57 +00:00
private void dgvEmployeeView_CellClick ( object sender , DataGridViewCellEventArgs e )
{
2019-10-16 22:09:14 +00:00
//The delete button was clicked.
2019-10-15 20:04:57 +00:00
if ( e . ColumnIndex = = 3 )
{
2019-10-16 22:09:14 +00:00
//Sanity check, per option.
if ( Properties . Settings . Default . ConfirmDelete )
{
DialogResult result = MessageBox . Show ( "Are you sure you want to delete this customer?" , "Queue System" , MessageBoxButtons . YesNo , MessageBoxIcon . Exclamation ) ;
if ( result = = DialogResult . No )
{
MessageBox . Show ( "Customer was not deleted." , "Queue System" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
return ;
}
}
SqliteDataAccess sdaEvView = new SqliteDataAccess ( ) ;
EmployeeView evCustomer = new EmployeeView ( ) ;
evCustomer . id = Int32 . Parse ( dgvEmployeeView . CurrentRow . Cells [ 0 ] . Value . ToString ( ) ) ;
sdaEvView . ArchiveCustomer ( evCustomer ) ;
RefreshEmployeeView ( ) ;
//Invoke the delegate to update customer view with updated data.
OnSendMessage ? . Invoke ( this , e ) ;
MessageBox . Show ( "Customer has been removed from the queue" , "Queue System" , MessageBoxButtons . OK , MessageBoxIcon . Information ) ;
2019-10-15 20:04:57 +00:00
}
2019-10-15 15:42:17 +00:00
}
2019-10-16 22:09:14 +00:00
// This event hooks the status combobox into the change commit event
private void dgvEmployeeView_EditingControlShowing ( object sender , DataGridViewEditingControlShowingEventArgs e )
{
if ( dgvEmployeeView . CurrentCell . ColumnIndex = = 2 )
{
ComboBox combo = e . Control as ComboBox ;
if ( combo ! = null )
{
combo . SelectionChangeCommitted + = new EventHandler ( dgvCbStatus_SelectionChangeCommitted ) ;
}
}
}
/ * This event fires when the "status" combo box was changed
* and that change was "committed"
* This is needed to update the backend SQL db on demand ,
* then update the customer view screen .
* /
private void dgvCbStatus_SelectionChangeCommitted ( object sender , EventArgs e )
{
DataGridViewComboBoxEditingControl dgvcbec = sender as DataGridViewComboBoxEditingControl ;
int CustomerId = Int32 . Parse ( dgvcbec . EditingControlDataGridView . CurrentRow . Cells [ 0 ] . Value . ToString ( ) ) ;
string new_status = dgvcbec . Text ;
//Check to see if we need an update.
SqliteDataAccess sdaEvView = new SqliteDataAccess ( ) ;
List < StatusModel > cxStatus = new List < StatusModel > ( ) ;
cxStatus = sdaEvView . GetCxStatus ( CustomerId ) ;
// Update not required.
if ( cxStatus [ 0 ] . status = = new_status )
return ;
/ * Update of the backend DB required beyond this point
* Update the customer status on the backend db .
* /
sdaEvView . UpdateCustomerStatus ( CustomerId , new_status ) ;
//Invoke the delegate to update customer view with updated data.
OnSendMessage ? . Invoke ( this , e ) ;
}
2019-10-07 16:37:47 +00:00
}
}