279551e9be
modified: Core.Tests/Charter/CurveDataConverterTests.cs modified: Core.Tests/Parsers/CntrlComparisonParserTests.cs modified: Core.Tests/Parsers/LeafInputCsvParserTests.cs modified: Core.Tests/Remote/PiscalSshClientTests.cs modified: Core/Charter/CurveDataConverter.cs modified: Core/Core.csproj modified: Core/DAL/DataService.cs modified: Core/DAL/LeafWebContext.cs modified: Core/DAL/LeafWebInitializer.cs renamed: Core/Models/CntrlComparison.cs -> Core/Entities/CntrlComparison.cs renamed: Core/Models/CntrlComparisonFittingInfo.cs -> Core/Entities/CntrlComparisonFittingInfo.cs renamed: Core/Models/CntrlComparisonPhotosyntheticInfo.cs -> Core/Entities/CntrlComparisonPhotosyntheticInfo.cs renamed: Core/Models/FluxnetSite.cs -> Core/Entities/FluxnetSite.cs renamed: Core/Models/LeafInput.cs -> Core/Entities/LeafInput.cs renamed: Core/Models/LeafInputData.cs -> Core/Entities/LeafInputData.cs renamed: Core/Models/LeafInputFile.cs -> Core/Entities/LeafInputFile.cs renamed: Core/Models/LeafInputInfo.cs -> Core/Entities/LeafInputInfo.cs renamed: Core/Models/LeafInputPhotosynthetic.cs -> Core/Entities/LeafInputPhotosynthetic.cs renamed: Core/Models/LeafInputSite.cs -> Core/Entities/LeafInputSite.cs renamed: Core/Models/LeafInputStatus.cs -> Core/Entities/LeafInputStatus.cs renamed: Core/Models/PhotosynthesisType.cs -> Core/Entities/PhotosynthesisType.cs modified: Core/Parsers/CntrlComparisonParser.cs modified: Core/Parsers/FluxnetSiteCsvParser.cs modified: Core/Parsers/LeafInputCsvParser.cs modified: Web/Controllers/LeafCharterController.cs modified: Web/Controllers/LeafInputController.cs modified: Web/ViewModels/LeafInput/CreateViewModel.cs
112 lines
3.2 KiB
C#
112 lines
3.2 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using System.Web;
|
|
using System.Web.Mvc;
|
|
using LeafWeb.Core.Entities;
|
|
using LeafWeb.Web.Attributes;
|
|
using LeafWeb.Web.ViewModels;
|
|
using LeafWeb.Web.ViewModels.LeafInput;
|
|
|
|
namespace LeafWeb.Web.Controllers
|
|
{
|
|
public class LeafInputController : ControllerBase
|
|
{
|
|
public ActionResult Index()
|
|
{
|
|
// initialize the session storage to retain SessionID between requests
|
|
Session["placeholder"] = 0;
|
|
var viewModel = new CreateViewModel();
|
|
HydrateCreateViewModel(viewModel);
|
|
return View(viewModel);
|
|
}
|
|
|
|
[HttpParamAction]
|
|
[HttpPost]
|
|
public ActionResult Index(CreateViewModel viewModel)
|
|
{
|
|
// directory name is the sessionID
|
|
var files = GetBackloadDirectoryFiles(Session.SessionID);
|
|
|
|
if (!files.Any())
|
|
ModelState.AddModelError("Files", "Must select at least one file");
|
|
|
|
if (ModelState.IsValid && !IsHttpParamActionMatch()) // HttpParamMatch indicates it's backing out from Confirm
|
|
{
|
|
// Go to confirmation
|
|
var confirmViewModel = new ConfirmViewModel(viewModel, files.Select(f => f.Name).ToArray());
|
|
HydrateCreateViewModel(confirmViewModel);
|
|
|
|
return View("Confirm", confirmViewModel);
|
|
}
|
|
|
|
HydrateCreateViewModel(viewModel);
|
|
return View("Index", viewModel);
|
|
}
|
|
|
|
private void HydrateCreateViewModel(dynamic viewModel)
|
|
{
|
|
if (viewModel.PhotosynthesisType == null)
|
|
viewModel.PhotosynthesisType = new SelectListViewModel();
|
|
if (viewModel.PhotosynthesisType.ListItems == null)
|
|
viewModel.PhotosynthesisType.ListItems = GetPhotosynthesisTypeSelectList();
|
|
}
|
|
|
|
[HttpParamAction]
|
|
[HttpPost]
|
|
public ActionResult Confirm(CreateViewModel viewModel)
|
|
{
|
|
// directory name is the sessionID
|
|
var files = GetBackloadDirectoryFiles(Session.SessionID);
|
|
|
|
if (!files.Any())
|
|
{
|
|
ModelState.AddModelError("Files", "Must select at least one file");
|
|
}
|
|
|
|
if (ModelState.IsValid)
|
|
{
|
|
// convert viewModel into Model
|
|
var leafInput = viewModel.GetFileInput(DataService);
|
|
// load files into LeafInputFile
|
|
leafInput.LeafInputFiles =
|
|
(from f in files
|
|
let bytes = System.IO.File.ReadAllBytes(f.FullName)
|
|
select new LeafInputFile {Filename = f.Name, Contents = bytes}).ToList();
|
|
|
|
// Save to db
|
|
DataService.AddLeafInput(leafInput);
|
|
|
|
DeleteBackloadDirectory(Session.SessionID);
|
|
|
|
SetStatusMessage(
|
|
HttpUtility.HtmlEncode(
|
|
$"A data set has submitted for '{viewModel.Identifier}' from '{viewModel.SiteId}'. " + Environment.NewLine
|
|
+ $"When complete, an email will be delivered to {viewModel.Name} <{viewModel.Email}> with results."),
|
|
StatusType.Success);
|
|
return RedirectToAction("Index");
|
|
}
|
|
|
|
HydrateCreateViewModel(viewModel);
|
|
return View("Index", viewModel);
|
|
}
|
|
|
|
private FileInfo[] GetBackloadDirectoryFiles(string directoryName)
|
|
{
|
|
var path = Path.Combine(Server.MapPath("~/Files/"), directoryName + "\\");
|
|
var directory = new DirectoryInfo(path);
|
|
return
|
|
!directory.Exists
|
|
? new FileInfo[] { }
|
|
: directory.GetFiles();
|
|
}
|
|
|
|
private void DeleteBackloadDirectory(string directoryName)
|
|
{
|
|
var path = Path.Combine(Server.MapPath("~/Files/"), directoryName + "\\");
|
|
var directory = new DirectoryInfo(path);
|
|
if (directory.Exists)
|
|
directory.Delete(true);
|
|
}
|
|
}
|
|
} |