MVC-databaskonstruktion

Log | Files | Refs | README

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:
MMVC-databaskonstruktion/Controllers/OperationsController.cs | 33+++++++++++++++++++++++++++++++--
MMVC-databaskonstruktion/Models/OperationsModel.cs | 53+++++++++++++++++++++++++++++++++++++++++++++++++----
MMVC-databaskonstruktion/Utils/DatabaseRepository.cs | 8+++++---
MMVC-databaskonstruktion/Views/Operations/index.cshtml | 12++++++++++++
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" />