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:
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