using System.IO; using System.Linq; using System.Web.Mvc; using DataModel.Models; using DataModel.Process; using DataModel.ViewModels; using WebInterface.Helpers; using WebInterface.Hubs; namespace WebInterface.Controllers { /// /// JDE search controller /// [Authorize] public class SearchController : CrudController { // GET: Search public ActionResult Index() { return View(); } // GET: Search/GetSearches public JsonNetResult GetSearches() { return new JsonNetResult() { Data = LotFinderDB.GetUserSearches(CurrentUser.Username).OrderByDescending(s => s.StartDT), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } // GET: Search/Queue public ActionResult Queue() { return View(); } // GET: Search/GetQueue public JsonNetResult GetQueue() { return new JsonNetResult() { Data = LotFinderDB.GetQueuedSearches(), JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } // GET: Search/Create public ActionResult Create() { return View(); } // GET: Search/GetSearch/id public JsonNetResult GetSearch(int? id) { SearchViewModel searchViewModel = null; if (id.HasValue) { searchViewModel = new SearchViewModel(LotFinderDB.GetSearch(id.Value)); } else { searchViewModel = new SearchViewModel() { UserName = CurrentUser.Username, Status = SearchStatus.New }; } return new JsonNetResult() { Data = searchViewModel, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } // GET: Search/CopySearch/id public JsonNetResult CopySearch(int? id) { SearchViewModel searchViewModel = null; if (id.HasValue) { searchViewModel = new SearchViewModel(LotFinderDB.GetSearch(id.Value)); } else { searchViewModel = new SearchViewModel() { UserName = CurrentUser.Username }; } searchViewModel.Status = SearchStatus.New; searchViewModel.UserName = CurrentUser.Username; searchViewModel.SubmitDT = null; searchViewModel.StartDT = null; searchViewModel.EndDT = null; return new JsonNetResult() { Data = searchViewModel, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } // POST: Search/Save [HttpPost] public JsonNetResult Save(SearchViewModel viewModel) { //Convert view model to standard model Search search = viewModel.ToModel(); //Save search details to DB int searchID = LotFinderDB.SubmitSearch(search); search.ID = searchID; try { //Publish new search SearchUpdate searchUpdate = new SearchUpdate(search); StatusHub.ContextInstance.Value.Clients.All.searchUpdate(searchUpdate); } catch { //Do nothing } //Reload session details and return them return new JsonNetResult() { Data = searchID }; } // GET: Search/GetResults/id public FileStreamResult GetResults(int id) { //Load results from database byte[] data = LotFinderDB.GetSearchResults(id); //Convert results to in-memory stream MemoryStream memoryStream = new MemoryStream(data); //Return data return new FileStreamResult(memoryStream, "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet") { FileDownloadName = "search_results.xlsx" }; } } }