// queries # of checkouts by item and location // result table is either returned for display or exported as an Excel file public List <ViewModels.QueryCheckoutsView> QueryCheckoutsByItem(DateTime startDate, DateTime endDate, string location, string action) { // get contents of tb_CSUCheckoutCheckin with date/loc parameters var checkouts = db.tb_CSUCheckoutCheckin.Where(m => m.CheckoutDate >= startDate && m.CheckoutDate <= endDate); List <ViewModels.QueryCheckoutsView> results = new List <ViewModels.QueryCheckoutsView>(); var numCheckedBackIn = 0; foreach (var c in checkouts) { if (location == "All" || location == c.CheckoutLocationFK) { bool containsItemAlready = results.Any(item => item.ItemUpc == c.ItemUPCFK); if (containsItemAlready) { foreach (var r in results) { if (r.ItemUpc == c.ItemUPCFK) { if (c.isLate == true) { r.NumLateCheckouts++; } if (c.CheckinDate != null) { numCheckedBackIn++; var duration = (TimeSpan)(c.CheckinDate - c.CheckoutDate); r.AvgCheckoutLength = ((r.AvgCheckoutLength * (numCheckedBackIn - 1)) + duration.TotalMinutes) / numCheckedBackIn; } r.NumCheckouts++; } } } else { ViewModels.QueryCheckoutsView entry = new ViewModels.QueryCheckoutsView(); entry.ItemUpc = c.ItemUPCFK; entry.NumCheckouts = 1; if (c.isLate == true) { entry.NumLateCheckouts = 1; } else { entry.NumLateCheckouts = 0; } if (c.CheckinDate != null) { numCheckedBackIn++; TimeSpan duration = (TimeSpan)(c.CheckinDate - c.CheckoutDate); entry.AvgCheckoutLength = duration.TotalMinutes; } results.Add(entry); } } } var sortedResults = results.OrderByDescending(a => a.NumCheckouts).ToList(); if (action == "excel") { List <ExportModels.ExportCheckoutsByItem> data = new List <ExportModels.ExportCheckoutsByItem>(); foreach (var item in sortedResults) { ExportModels.ExportCheckoutsByItem e = new ExportModels.ExportCheckoutsByItem(); e.ItemUpc = item.ItemUpc; e.NumberOfCheckouts = Convert.ToInt32(item.NumCheckouts); e.NumberOfLateCheckouts = Convert.ToInt32(item.NumLateCheckouts); e.AverageLengthOfCheckout = Convert.ToDouble(item.AvgCheckoutLength); data.Add(e); } var grid = new System.Web.UI.WebControls.GridView(); grid.DataSource = data; grid.DataBind(); Response.ClearContent(); var fname = "CheckoutsByItem_" + location + ".xls"; Response.AddHeader("content-disposition", "attachment; filename=" + fname); Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); List <ViewModels.QueryCheckoutsView> emptyResults = new List <ViewModels.QueryCheckoutsView>(); return(emptyResults); } return(sortedResults); }
// queries # of checkouts by hour and location // result table is either returned for display or exported as an Excel file public List <ViewModels.QueryCheckoutsView> QueryCheckoutsByHour(DateTime startDate, DateTime endDate, string location, string action) { // get contents of tb_CSUCheckoutCheckin with date/loc parameters var checkouts = db.tb_CSUCheckoutCheckin.Where(m => m.CheckoutDate >= startDate && m.CheckoutDate <= endDate); List <ViewModels.QueryCheckoutsView> results = new List <ViewModels.QueryCheckoutsView>(); foreach (var c in checkouts) { if (location == "All" || location == c.CheckoutLocationFK) { bool containsHourAlready = results.Any(item => item.CheckoutHour == Convert.ToDateTime(c.CheckoutDate).Hour); if (containsHourAlready) { // increment hour tally foreach (var r in results) { if (r.CheckoutHour == Convert.ToDateTime(c.CheckoutDate).Hour) { r.NumCheckouts++; } } } else { // add hour to list and set the tally to 1 ViewModels.QueryCheckoutsView entry = new ViewModels.QueryCheckoutsView(); entry.CheckoutHour = Convert.ToDateTime(c.CheckoutDate).Hour; entry.NumCheckouts = 1; results.Add(entry); } } } var sortedResults = results.OrderBy(a => a.CheckoutHour).ToList(); if (action == "excel") { List <ExportModels.ExportCheckoutsByHour> data = new List <ExportModels.ExportCheckoutsByHour>(); foreach (var item in sortedResults) { ExportModels.ExportCheckoutsByHour e = new ExportModels.ExportCheckoutsByHour(); e.CheckoutHour = item.CheckoutHour.ToString(); e.NumberOfCheckouts = Convert.ToInt32(item.NumCheckouts); data.Add(e); } var grid = new System.Web.UI.WebControls.GridView(); grid.DataSource = data; grid.DataBind(); Response.ClearContent(); var fname = "CheckoutsByHour_" + location + ".xls"; Response.AddHeader("content-disposition", "attachment; filename=" + fname); Response.ContentType = "application/vnd.ms-excel"; StringWriter sw = new StringWriter(); System.Web.UI.HtmlTextWriter htw = new System.Web.UI.HtmlTextWriter(sw); grid.RenderControl(htw); Response.Write(sw.ToString()); Response.End(); List <ViewModels.QueryCheckoutsView> emptyResults = new List <ViewModels.QueryCheckoutsView>(); return(emptyResults); } return(sortedResults); }