MVC-databaskonstruktion

Log | Files | Refs | README

commit 5165239a09d8147a995b352b7b9096c8fea8cdb5
parent 97e3252cdb4b91cf0a0b987e83e283e98b7b9804
Author: William Lindholm <william_lindholm@outlook.com>
Date:   Sun, 15 Oct 2023 18:12:01 +0200

Now showing reports for incidents.

Diffstat:
MMVC-databaskonstruktion/Controllers/IncidentsController.cs | 37++++++++++++++++++++++++++++++++++++-
MMVC-databaskonstruktion/Controllers/OperationsController.cs | 6++++++
MMVC-databaskonstruktion/Models/IncidentsModel.cs | 53++++++++++++++++++++++++++++++++++++++++++++++++++++-
MMVC-databaskonstruktion/Views/Incidents/Details.cshtml | 13+++++++++++--
4 files changed, 105 insertions(+), 4 deletions(-)

diff --git a/MVC-databaskonstruktion/Controllers/IncidentsController.cs b/MVC-databaskonstruktion/Controllers/IncidentsController.cs @@ -19,13 +19,16 @@ namespace MVC_databaskonstruktion.Controllers { ViewBag.Table = _incidentsModel.GetIncidents(IncidentName); ViewBag.Modal = _incidentsModel.CreateIncidentModal(); - + return View(); } public IActionResult Details(string IncidentName, int incidentNumber) { ViewBag.Operations = _incidentsModel.GetOperations(IncidentName, incidentNumber); + ViewBag.AddOperationModal = _incidentsModel.CreateOperationModal(IncidentName, incidentNumber); + ViewBag.Reports = _incidentsModel.GetReports(IncidentName, incidentNumber); + return View(); } @@ -81,5 +84,37 @@ namespace MVC_databaskonstruktion.Controllers return RedirectToAction("Index"); } + + public IActionResult CreateOperation(string OperationName, DateTime StartDate, DateTime EndDate, bool SuccessRate, string GroupLeader, string IncidentName, int IncidentNumber) + { + try + { + _incidentsModel.CreateOperation(OperationName, StartDate, EndDate, SuccessRate, GroupLeader, IncidentName, IncidentNumber); + } + catch (MySqlException e) + { + switch (e.Number) + { + case 1062: + TempData["ErrorMessage"] = "Incident already exists!"; + break; + case 1406: + TempData["ErrorMessage"] = "Data too long!"; + break; + case 3819: + TempData["ErrorMessage"] = "Invalid Data!"; + break; + default: + TempData["ErrorMessage"] = $"Something went wrong: {e.Number}"; + break; + } + } + + return RedirectToAction("Details", new + { + IncidentName, + IncidentNumber + }); + } } } diff --git a/MVC-databaskonstruktion/Controllers/OperationsController.cs b/MVC-databaskonstruktion/Controllers/OperationsController.cs @@ -55,6 +55,12 @@ namespace MVC_databaskonstruktion.Controllers } } + var referrer = Request.Headers["Referer"]; + if (!string.IsNullOrEmpty(referrer)) + { + return Redirect(referrer); + } + return RedirectToAction("Index"); } diff --git a/MVC-databaskonstruktion/Models/IncidentsModel.cs b/MVC-databaskonstruktion/Models/IncidentsModel.cs @@ -1,4 +1,5 @@ -using MVC_databaskonstruktion.Utils; +using Microsoft.AspNetCore.Mvc.Rendering; +using MVC_databaskonstruktion.Utils; namespace MVC_databaskonstruktion.Models { @@ -25,6 +26,15 @@ namespace MVC_databaskonstruktion.Models .Build(); } + public TableObject GetReports(string IncidentName, int IncidentNumber) + { + var reportsTable = new TableObjectBuilder(); + + return reportsTable + .SetDataTable(_databaseRepository.GetTable($"SELECT * FROM Report WHERE IncidentName = '{IncidentName}' AND IncidentNumber = '{IncidentNumber}';")) + .Build(); + } + public void DeleteIncident(string table, string incidentName, string incidentNumber) { List<KeyValuePair<string, object>> conditions = new List<KeyValuePair<string, object>> @@ -64,6 +74,31 @@ namespace MVC_databaskonstruktion.Models return modalBuilder.Build(); } + public ModalContext CreateOperationModal(string IncidentName, int IncidentNumber) + { + var incidentSelection = _databaseRepository.GetColumnAsDropdown("SELECT IncidentName, IncidentNumber FROM Incident;"); + var groupLeaderSelection = _databaseRepository.GetColumnAsDropdown("SELECT CodeName FROM GroupLeaders"); + var successSelection = new List<SelectListItem> + { + new SelectListItem { Text = "Success", Value = "True" }, + new SelectListItem { Text = "Fail", Value = "False" } + }; + + var modalBuilder = new ModalBuilder() + .SetTitle("Create Operation") + .SetIdentifier("createOperationModal") + .SetAction("CreateOperation", "Incidents") + .AddInput("OperationName", "OperationName", "normal", "OperationName") + .AddInput("StartDate", "StartDate", "datetime", "StartDate") + .AddInput("EndDate", "EndDate", "datetime", "EndDate") + .AddInput("SuccessRate", "Operation Result", "dropdown", "", successSelection) + .AddInput("GroupLeader", "GroupLeader", "dropdown", "", groupLeaderSelection) + .AddInput("IncidentName", "IncidentName", "hidden", IncidentName) + .AddInput("IncidentNumber", "IncidentNumber", "hidden", IncidentNumber.ToString()); + + return modalBuilder.Build(); + } + public void CreateIncident(string IncidentName, int IncidentNumber, string RegionName, int Terrain, string Location) { var IncidentData = new List<KeyValuePair<string, object>> @@ -77,5 +112,21 @@ namespace MVC_databaskonstruktion.Models _databaseRepository.CreateRow("Incident", IncidentData); } + + public void CreateOperation(string OperationName, DateTime StartDate, DateTime EndDate, bool SuccessRate, string GroupLeader, string IncidentName, int IncidentNumber) + { + var OperationData = new List<KeyValuePair<string, object>> + { + new KeyValuePair<string, object>("OperationName", OperationName), + new KeyValuePair<string, object>("StartDate", StartDate.ToString("yyyy-M-d")), + new KeyValuePair<string, object>("EndDate", EndDate.ToString("yyyy-M-d")), + new KeyValuePair<string, object>("SuccessRate", SuccessRate), + new KeyValuePair<string, object>("GroupLeader", GroupLeader), + new KeyValuePair<string, object>("IncidentName", IncidentName), + new KeyValuePair<string, object>("IncidentNumber", IncidentNumber) + }; + + _databaseRepository.CreateRow("Operation", OperationData); + } } } diff --git a/MVC-databaskonstruktion/Views/Incidents/Details.cshtml b/MVC-databaskonstruktion/Views/Incidents/Details.cshtml @@ -7,4 +7,13 @@ <hr /> <h3>Operations in Incident</h3> -<partial name="_TablePartial" model="ViewBag.Operations" /> -\ No newline at end of file +<partial name="_TablePartial" model="ViewBag.Operations" /> +<hr /> + +<h3>Reports for Incident</h3> +<partial name="_TablePartial" model="ViewBag.Reports" /> +<hr /> + +<label>Add operation to incident</label> +<br /> +<partial name="_ModalPartial" model="ViewBag.AddOperationModal" /> +\ No newline at end of file