Files
FSI.BT.IR.Organization/scr/FSI.BT.IR.Organization.Web/Controllers/HomeController.cs
2024-10-25 13:25:15 +02:00

127 lines
3.5 KiB
C#

using Microsoft.AspNetCore.Mvc;
using FSI.BT.IR.Organization.Db.Services;
namespace FSI.BT.IR.Organization.Web.Controllers;
public class HomeController : Controller
{
private readonly IOrganizationService _service;
public HomeController(IOrganizationService service)
{
_service = service;
}
public async Task<IActionResult> IndexAsync()
{
Task<List<Organization.Db.Models.Organization>> data = _service.GetDatasAsync();
return View(await data);
}
public async Task<IActionResult> AddOrEditAsync(int id = 0)
{
if (id == 0)
{
var item = new Organization.Db.Models.Organization();
item.Parents = (await _service.GetDatasAsync()).OrderBy(x => x.Name).ToList();
item.Parents.Add(new Organization.Db.Models.Organization());
if (item.ParentId == null)
{
item.ParentId = 0;
}
return View(item);
}
else
{
var item = await _service.GetDataByIdAsync(id);
if (item == null) // kein Fund
{
return NotFound();
}
item.Parents = await _service.GetDatasAsync();
item.Parents.Add(new Organization.Db.Models.Organization()); // neue & leere Organisation einfügen
item.Parents.Remove(item); // eigene Organisation entfernen
item.Parents.OrderBy(x => x.Name); // sortieren
if (item.ParentId == null)
{
item.ParentId = 0;
}
return View(item);
}
}
[HttpPost]
public async Task<IActionResult> AddOrEditAsync(int id, Organization.Db.Models.Organization item)
{
ModelState.Remove(nameof(item.Parent));
ModelState.Remove(nameof(item.Parents));
ModelState.Remove(nameof(item.FullShortName));
item.Updated = DateTime.Now; // Zeitstempel für Modifikation
if (ModelState.IsValid)
{
if (item.ParentId == 0)
{
item.ParentId = null;
}
if (id == 0) // Insert
{
try
{
item.Created = item.Updated; // Zeitstempel für Erstellung
await _service.AddAsync(item);
}
catch (Exception ex)
{
}
}
else // Update
{
try
{
await _service.UpdateAsync(item);
}
catch (Exception ex)
{
}
}
return Json(new { isValid = true, html = Helper.RenderRazorViewToString(this, "_ViewAll", await _service.GetDatasAsync()) });
}
else
{
var errors = ModelState.SelectMany(x => x.Value.Errors.Select(z => z.Exception));
}
item.Parents.Add(new Organization.Db.Models.Organization());
return Json(new { isValid = false, html = Helper.RenderRazorViewToString(this, "AddOrEdit", item) });
}
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> DeleteConfirmedAsync(int id)
{
await _service.SetParentIdNullAsync(id);
var item = await _service.GetDataByIdAsync(id);
await _service.RemoveAsync(item);
return Json(new { html = Helper.RenderRazorViewToString(this, "_ViewAll", await _service.GetDatasAsync()) });
}
}