using Dapper; using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Data.SQLite; using System.Linq; using System.Text; using System.Threading.Tasks; namespace QueueSys { public class CustomerView { public string Customer { get; } public string Status { get; } } public class ReportView { public int id { get; } public string customer_name { get; set; } public int num_bags { get; set; } public string employee { get; set; } public int status { get; set; } public string start_time { get; set; } public string end_time { get; set; } public string time_elapsed { get; set; } } public class EmployeeView { public int id { get; set; } public string customer_name { get; set; } } public class StatusModel { public string status { get; set; } } public class endTimeModel { public string end_time { get; set; } } public class SqliteDataAccess { public List LoadEmployeeView() { //A using statement protects us as a failsafe: it guarantees the connection to the //database will be closed, even in event of an application or computer crash. using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { string strQuery = "SELECT id,customer_name FROM active_customers;"; var output = cnn.Query(strQuery, new DynamicParameters()); return output.ToList(); } } public List GetCxStatus(int customer_id) { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { string strQuery = "SELECT status_lookup.status FROM active_customers INNER JOIN status_lookup on active_customers.status_id=status_lookup.status_id WHERE id=@id;"; var output = cnn.Query(strQuery, new { id = customer_id }); return output.ToList(); } } public List LoadCustomerView() { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { string strQuery = "SELECT customer_name as Customer,status_lookup.status as Status FROM active_customers INNER JOIN status_lookup on active_customers.status_id=status_lookup.status_id ORDER BY active_customers.status_id"; var output = cnn.Query(strQuery, new DynamicParameters()); return output.ToList(); } } public void SaveCustomer(ReportView customer) { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { string strQuery = "INSERT INTO active_customers (customer_name, num_bags, employee, status_id) VALUES (@customer_name, @num_bags, @employee, 3)"; cnn.Execute(strQuery, customer); } } public void ArchiveCustomer(EmployeeView customer) { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { //Check to see if the customer already has an end_time string strQuery = "SELECT end_time FROM active_customers WHERE id=@id"; List etm = new List(); var output = cnn.Query(strQuery, new { id = customer.id }); etm = output.ToList(); if(etm[0].end_time != null) { strQuery = "INSERT INTO archive(id, customer_name,num_bags,employee,status_id,start_time,end_time) SELECT id,customer_name,num_bags,employee,status_id,start_time,end_time FROM active_customers WHERE id=@id"; } else { strQuery = "INSERT INTO archive(id, customer_name,num_bags,employee,status_id,start_time) SELECT id,customer_name,num_bags,employee,status_id,start_time FROM active_customers WHERE id=@id"; } cnn.Execute(strQuery, customer); strQuery = "DELETE FROM active_customers WHERE id=@id"; cnn.Execute(strQuery, customer); } } public List LoadStatusStrings() { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { string strQuery = "SELECT status FROM status_lookup"; var output = cnn.Query(strQuery, new DynamicParameters()); return output.ToList(); } } public void UpdateCustomerStatus(int customer_id_in, string status_in) { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { string strQuery = "UPDATE active_customers SET status_id = (SELECT status_lookup.status_id from status_lookup WHERE status_lookup.status = @status_str) WHERE id=@customer_id"; cnn.Execute(strQuery, new {customer_id = customer_id_in, status_str = status_in }); } } public void UpdateEndTime(int customer_id_in, string trans) { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { switch(trans) { case "add": { string strQuery = "UPDATE active_customers SET end_time = datetime() WHERE id=@customer_id"; cnn.Execute(strQuery, new { customer_id = customer_id_in }); break; } case "remove": { string strQuery = "UPDATE active_customers SET end_time = NULL WHERE id=@customer_id"; cnn.Execute(strQuery, new { customer_id = customer_id_in }); break; } } } } public List QueryReports() { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { //Clear old customers from the archive table. string strQuery = "DELETE FROM archive WHERE julianday(end_time) < julianday('now','-6 months')"; cnn.Execute(strQuery); strQuery = "SELECT *,Cast ((JulianDay(end_time) - JulianDay(start_time)) * 24 * 60 As Integer) as time_elapsed from archive"; var output = cnn.Query(strQuery, new DynamicParameters()); return output.ToList(); } } private static string LoadConnectionString(string id="Default") { return ConfigurationManager.ConnectionStrings[id].ConnectionString; } } }