QueueSys/QueueSys/SqliteDataAccess.cs

183 lines
7.0 KiB
C#

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<EmployeeView> 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<EmployeeView>(strQuery, new DynamicParameters());
return output.ToList();
}
}
public List<StatusModel> 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<StatusModel>(strQuery, new { id = customer_id });
return output.ToList();
}
}
public List<CustomerView> 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<CustomerView>(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<endTimeModel> etm = new List<endTimeModel>();
var output = cnn.Query<endTimeModel>(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<StatusModel> LoadStatusStrings()
{
using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString()))
{
string strQuery = "SELECT status FROM status_lookup";
var output = cnn.Query<StatusModel>(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<ReportView> 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<ReportView>(strQuery, new DynamicParameters());
return output.ToList();
}
}
private static string LoadConnectionString(string id="Default")
{
return ConfigurationManager.ConnectionStrings[id].ConnectionString;
}
}
}