Files
BeWoPlaner/BeWoPlanerMobil/Controllers/PersonController.cs

359 lines
12 KiB
C#

using BeWoPlanerMobil.Models;
using BeWoPlanerMobil.Service;
using BeWoPlanerMobil.Util;
using BS.Shared;
using BS.Shared.DataContracts;
using System;
using System.IO;
using System.Linq;
using System.Web.Mvc;
namespace BeWoPlanerMobil.Controllers
{
public class PersonController : AbstractBaseController, IDocumentsController
{
[Authorize]
public override string SaveCollapsibleStatus(bool isOpen, string identifier)
{
return SaveCollapsibleStatusToModel(Model, isOpen, identifier);
}
public PersonController() { }
private PersonModel _Model;
public PersonModel Model
{
get
{
if(!MobileSessionFacade.IsUserLoggedIn())
{
Logout();
return null;
}
if(_Model is null)
{
_Model = new PersonModel();
InitModel(_Model);
InitViewModel();
}
return _Model;
}
}
[Authorize]
public ActionResult Person(long? id)
{
try
{
if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
return Logout();
}
if(id.HasValue)
{
LoadPersonToModel(id);
}
}
catch(Exception exception)
{
Log.Info("Exception: " + exception.Message + "\n" + exception.StackTrace);
if(exception.InnerException != null)
{
Log.Info("\n\nInnerException: " + exception.InnerException.Message + "\n" + exception.InnerException.StackTrace);
}
throw;
}
return View(Model);
}
[Authorize]
[HttpPost]
public ActionResult SelectPerson(FormCollection formCollection)
{
if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return Logout();
}
var selectedPersonOidString = formCollection["SelectedPersonOid"];
if(long.TryParse(selectedPersonOidString, out var selectedPersonOid))
{
LoadPersonToModel(selectedPersonOid);
}
return RedirectToActionPermanent("Person", new { id = selectedPersonOid });
}
private void InitViewModel()
{
if(!MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
Logout();
return;
}
if(Model.PersonSessionModel.SelectedPersonOid.HasValue)
{
Model.SelectedPerson = CustomerService.LoadPerson(Model.PersonSessionModel.SelectedPersonOid.Value);
Model.Umfeld = CustomerService.GetEnvironmentCustomerForPerson(Model.PersonSessionModel.SelectedPersonOid.Value);
}
Model.Persons = CustomerService.GetAllAuthorizedCompactPersons();
if(Model.SelectedPerson?.PersonOid != null)
{
Model.FolderTree = OperationsService.GetFolderTree(TableID.Person, Model.SelectedPerson.PersonOid.Value);
}
}
private void LoadPersonToModel(long? personOid)
{
if(personOid is null)
{
return;
}
if(personOid.Value > 0 && false == Model.Persons.Any(p => p.PersonOid.Equals(personOid.Value)))
{
return;
}
if(personOid == -1)
{
Model.PersonSessionModel.ResetValues();
}
else
{
if(Model.SelectedPersonOid?.Equals(personOid) ?? false)
{
Model.PersonSessionModel.ResetValues();
}
Model.Umfeld = CustomerService.GetEnvironmentCustomerForPerson(personOid.Value);
Model.SelectedPersonOid = personOid;
}
}
#region Dokumente
[Authorize]
public ActionResult SaveDescriptionChange(string descriptionText, long? fileOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn())
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(Model.ObjectOid is null || fileOid is null)
{
TempData[TempDataConstants.ErrorAlertPopupMessage] = "Es ist leider ein unbekannter Fehler aufgetreten.<br/><br/>Bitte kontaktieren Sie einen Administrator.";
return PartialView("DocumentPartial", Model);
}
var file = DownloadService.GetFileAttachmentForMobile(fileOid.Value, MobileSessionFacade.Tenant);
if(file != null)
{
file.Description = descriptionText;
OperationsService.UpdateFileAttachment(file);
}
Model.FolderTree = OperationsService.GetFolderTree(Model.ObjectTid, Model.ObjectOid.Value);
var fileTemp = DownloadService.GetFileAttachmentForMobile(fileOid.Value, MobileSessionFacade.Tenant);
return PartialView("DocumentPartial", Model);
}
[Authorize]
public FileResult DownloadFile(long fileOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return null;
}
var fileAttachment = DownloadService.GetFileAttachmentForMobile(fileOid, MobileSessionFacade.Tenant);
return File(fileAttachment.BinaryData, "application/octet-stream", fileAttachment.FileName);
}
[Authorize]
public ActionResult DeleteFile(long? fileOid, long? fileVersion)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn())
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(fileOid is null || fileVersion is null || Model.ObjectOid is null)
{
return PartialView("DocumentPartial", Model);
}
OperationsService.DeleteFileAttachment(fileOid.Value, fileVersion.Value);
Model.FolderTree = OperationsService.GetFolderTree(Model.ObjectTid, Model.ObjectOid.Value);
return PartialView("DocumentPartial", Model);
}
[Authorize]
[HttpPost]
public ActionResult UploadFile(FormCollection formCollection)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(Request.Files.Count > 0)
{
var folderOidAsString = formCollection["folder-oid-input"];
var description = formCollection["file-description-input"];
var folderOid = string.IsNullOrWhiteSpace(folderOidAsString) ? null : (long?)long.Parse(folderOidAsString);
var file = Request.Files[0];
if(file != null && file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
byte[] fileData;
using(var binaryReader = new BinaryReader(file.InputStream))
{
fileData = binaryReader.ReadBytes(file.ContentLength);
}
var fileAttachment = new FileAttachmentDC
{
BeWoFolderOid = folderOid,
Description = description,
FileName = fileName,
ObjectTid = Model.ObjectTid,
ObjectOid = Model.ObjectOid,
BinaryData = fileData,
FileAttachmentType = FileAttachmentType.NotSpecified,
InsertedBy = $"{Model.LoggedInEmployee.FirstName} {Model.LoggedInEmployee.LastName}",
InsertedOn = DateTime.Now
};
OperationsService.InsertFileAttachment(fileAttachment);
}
}
return RedirectToActionPermanent("Person", new { id = Model.SelectedPersonOid, model = Model });
}
[Authorize]
public ActionResult DeleteFolder(long? folderOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(folderOid is null)
{
return PartialView("DocumentPartial", Model);
}
var folder = OperationsService.GetFolderById(folderOid.Value);
if(
folder?.BeWoFolderOid != null &&
folder.BeWoFolderVersion.HasValue &&
Model.ObjectOid.HasValue &&
folder.ObjectOid.Equals(Model.ObjectOid.Value) &&
folder.ObjectTid == Model.ObjectTid
)
{
OperationsService.DeleteFolder(folder.BeWoFolderOid.Value, folder.BeWoFolderVersion.Value);
Model.FolderTree = OperationsService.GetFolderTree(Model.ObjectTid, Model.ObjectOid.Value);
}
return PartialView("DocumentPartial", Model);
}
[Authorize]
public ActionResult RenameFolder(string newName, long folderOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(string.IsNullOrWhiteSpace(newName))
{
TempData[TempDataConstants.ErrorMessageKey] = "Ungültiger Name";
return PartialView("DocumentPartial", Model);
}
var folder2Rename = OperationsService.GetFolderById(folderOid);
if(folder2Rename != null && Model.ObjectOid.HasValue && folder2Rename.ObjectTid == Model.ObjectTid && folder2Rename.ObjectOid == Model.ObjectOid.Value)
{
folder2Rename.Name = newName;
OperationsService.UpdateFolder(folder2Rename);
Model.FolderTree = OperationsService.GetFolderTree(Model.ObjectTid, Model.ObjectOid.Value);
}
return PartialView("DocumentPartial", Model);
}
[Authorize]
public ActionResult AddNewFolder(string folderName, long? parentFolderOid)
{
if(Model is null || !MobileSessionFacade.IsUserLoggedIn() || Request.Browser.Browser.Equals("InternetExplorer"))
{
TempData[TempDataConstants.DoLogoutKey] = true;
return PartialView("DocumentPartial");
}
if(Model.ObjectOid is null)
{
return PartialView("DocumentPartial", Model);
}
if(string.IsNullOrWhiteSpace(folderName))
{
folderName = "Neuer Ordner";
}
var folder = new BeWoFolderDC
{
Name = folderName,
ObjectTid = Model.ObjectTid,
ObjectOid = Model.ObjectOid,
ParentBeWoFolderOid = parentFolderOid
};
OperationsService.InsertNewFolder(folder);
Model.FolderTree = OperationsService.GetFolderTree(Model.ObjectTid, Model.ObjectOid.Value);
return PartialView("DocumentPartial", Model);
}
#endregion
}
}