commit 810cec6fc721f8ea8bbb63eba889029782c63ed6
parent 80e8417c6c672a67e34963cc1d6f9c3cb81c3dc0
Author: William Lindholm <william_lindholm@outlook.com>
Date: Sun, 15 Oct 2023 01:52:13 +0200
Added search for operations.
Diffstat:
4 files changed, 97 insertions(+), 9 deletions(-)
diff --git a/MVC-databaskonstruktion/Controllers/OperationsController.cs b/MVC-databaskonstruktion/Controllers/OperationsController.cs
@@ -16,9 +16,10 @@ namespace MVC_databaskonstruktion.Controllers
_operationsModel = new OperationsModel(_configuration);
}
- public IActionResult Index()
+ public IActionResult Index(string OperationName = "")
{
- ViewBag.Table = _operationsModel.GetOperations();
+ ViewBag.Table = _operationsModel.GetOperations(OperationName);
+ ViewBag.Modal = _operationsModel.CreateOperationModal();
return View();
}
@@ -47,5 +48,33 @@ namespace MVC_databaskonstruktion.Controllers
return RedirectToAction("Index");
}
+
+ public IActionResult Create(string OperationName, DateTime StartDate, DateTime EndDate, bool SuccessRate, string GroupLeader, string Incident)
+ {
+ try
+ {
+ _operationsModel.CreateOperation(OperationName, StartDate, EndDate, SuccessRate, GroupLeader, Incident);
+ }
+ catch (MySqlException e)
+ {
+ switch (e.Number)
+ {
+ case 1062:
+ TempData["ErrorMessage"] = "Operation 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("Index");
+ }
}
}
diff --git a/MVC-databaskonstruktion/Models/OperationsModel.cs b/MVC-databaskonstruktion/Models/OperationsModel.cs
@@ -1,4 +1,5 @@
-using MVC_databaskonstruktion.Utils;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using MVC_databaskonstruktion.Utils;
namespace MVC_databaskonstruktion.Models
{
@@ -18,10 +19,10 @@ namespace MVC_databaskonstruktion.Models
.SetDeleteTable("Operation");
}
- public TableObject GetOperations()
+ public TableObject GetOperations(string searchQuery)
{
return _tableBuilder
- .SetDataTable(_databaseRepository.GetTable("Operation"))
+ .SetDataTable(_databaseRepository.GetTable($"SELECT * FROM Operation WHERE OperationName LIKE '%{searchQuery}%';"))
.Build();
}
@@ -44,5 +45,48 @@ namespace MVC_databaskonstruktion.Models
_databaseRepository.DeleteRow(table, conditions);
}
+
+ public ModalContext CreateOperationModal()
+ {
+ 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 = "1" },
+ new SelectListItem { Text = "Fail", Value = "0" }
+ };
+
+ var modalBuilder = new ModalBuilder()
+ .SetTitle("Create Operation")
+ .SetIdentifier("createOperationModal")
+ .SetAction("Create", "Operations")
+ .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("Incident", "Incident", "dropdown", "", incidentSelection);
+
+ return modalBuilder.Build();
+ }
+
+ public void CreateOperation(string OperationName, DateTime StartDate, DateTime EndDate, bool SuccessRate, string GroupLeader, string Incident)
+ {
+ var IncidentName = Incident.Split(", ")[0];
+ var IncidentNumber = Incident.Split(", ")[1];
+
+ 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);
+ }
}
-}
+}
+\ No newline at end of file
diff --git a/MVC-databaskonstruktion/Utils/DatabaseRepository.cs b/MVC-databaskonstruktion/Utils/DatabaseRepository.cs
@@ -30,17 +30,19 @@ namespace MVC_databaskonstruktion.Utils
}
}
- public List<SelectListItem> GetColumnAsDropdown(string query)
+ public List<SelectListItem> GetColumnAsDropdown(string query)
{
var table = GetTable(query);
var dropdown = new List<SelectListItem>();
foreach (DataRow row in table.Rows)
{
+ string value = string.Join(", ", row.ItemArray.Select(item => item.ToString()));
+
dropdown.Add(new SelectListItem
{
- Value = row[0].ToString(),
- Text = row[0].ToString()
+ Value = value,
+ Text = value
});
}
diff --git a/MVC-databaskonstruktion/Views/Operations/index.cshtml b/MVC-databaskonstruktion/Views/Operations/index.cshtml
@@ -3,6 +3,18 @@
ViewData["Title"] = "index";
}
+<form action="@Url.Action("index")" method="get" class="mt-1">
+ <label>Search for Operation:</label>
+ <br />
+ <input type="text" name="OperationName" placeholder="Search" class="form-control d-inline-block" style="vertical-align: middle; width: auto;" />
+ <button type="submit" class="btn btn-primary ml-2">Search</button>
+</form>
+<hr />
+
<h3>Operations</h3>
<partial name="_TablePartial" model="ViewBag.Table" />
+<hr />
+<label>Create Operation:</label>
+<br />
+<partial name="_ModalPartial" model="ViewBag.Modal" />