commit 0bf410846cece5304f77ce26266748ae2a6e9717
parent faadd65488e915e6cca66158408b4f65468c14fc
Author: William Lindholm <a22willi@student.his.se>
Date: Thu, 12 Oct 2023 11:28:44 +0200
Added ability to view details of rows.
Diffstat:
6 files changed, 52 insertions(+), 26 deletions(-)
diff --git a/MVC-databaskonstruktion.sln b/MVC-databaskonstruktion.sln
@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.3.32804.467
MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MVC-databaskonstruktion", "MVC-databaskonstruktion\MVC-databaskonstruktion.csproj", "{87C79C5B-BD7C-4962-9897-EB4642A65D90}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MVC-databaskonstruktion", "MVC-databaskonstruktion\MVC-databaskonstruktion.csproj", "{87C79C5B-BD7C-4962-9897-EB4642A65D90}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/MVC-databaskonstruktion/Controllers/AgentsController.cs b/MVC-databaskonstruktion/Controllers/AgentsController.cs
@@ -22,6 +22,12 @@ namespace MVC_databaskonstruktion.Controllers
return View();
}
+ public IActionResult FieldAgentDetails(string CodeName)
+ {
+ ViewBag.AgentOperations = _agentsModel.GetAgentOperations(CodeName);
+ return View();
+ }
+
public IActionResult Delete(string table, string CodeName)
{
try
@@ -38,9 +44,6 @@ namespace MVC_databaskonstruktion.Controllers
case 1452:
TempData["ErrorMessage"] = "Foreign Key Constraint Failed!";
break;
- case 1062:
- TempData["ErrorMessage"] = "Unique Constraint Failed!";
- break;
default:
TempData["ErrorMessage"] = $"Something went wrong: {e.Number}";
break;
diff --git a/MVC-databaskonstruktion/Models/AgentsModel.cs b/MVC-databaskonstruktion/Models/AgentsModel.cs
@@ -14,15 +14,7 @@ namespace MVC_databaskonstruktion.Models
_databaseRepository = new DatabaseRepository(_configuration);
_tableBuilder = new TableObjectBuilder()
.SetPrimaryKeys(new List<string> { "CodeName" })
- .SetDeleteTable("Agent")
- .SetRedirect("Index");
- }
-
- public TableObject GetAgents()
- {
- return _tableBuilder.SetControllerName("Agents")
- .SetDataTable(_databaseRepository.GetTable("Agent"))
- .Build();
+ .SetDeleteTable("Agent");
}
public void DeleteAgent(string table, string CodeName)
@@ -39,6 +31,7 @@ namespace MVC_databaskonstruktion.Models
{
return _tableBuilder
.SetDataTable(_databaseRepository.GetTable("FieldAgents"))
+ .SetRedirect("FieldAgentDetails")
.Build();
}
@@ -46,6 +39,7 @@ namespace MVC_databaskonstruktion.Models
{
return _tableBuilder
.SetDataTable(_databaseRepository.GetTable("GroupLeaders"))
+ .SetRedirect(string.Empty)
.Build();
}
@@ -53,7 +47,18 @@ namespace MVC_databaskonstruktion.Models
{
return _tableBuilder
.SetDataTable(_databaseRepository.GetTable("Managers"))
+ .SetRedirect(string.Empty)
.Build();
}
+
+ public TableObject GetAgentOperations(string CodeName)
+ {
+
+ string query = $"SELECT * FROM OperatesIn WHERE CodeName = '{CodeName}';";
+ return _tableBuilder.SetDataTable(_databaseRepository.GetTable(query))
+ .SetDeleteTable(string.Empty)
+ .SetRedirect(string.Empty)
+ .Build();
+ }
}
}
diff --git a/MVC-databaskonstruktion/Utils/TableObjectBuilder.cs b/MVC-databaskonstruktion/Utils/TableObjectBuilder.cs
@@ -14,9 +14,10 @@ namespace MVC_databaskonstruktion.Utils
{
_dataTable = dataTable;
}
+
public TableObjectBuilder()
{
- //empty constructor if you want to set the DataTable later
+ //empty constructor to be able to set DataTable later
}
public TableObjectBuilder SetControllerName(string controllerName)
diff --git a/MVC-databaskonstruktion/Views/Agents/FieldAgentDetails.cshtml b/MVC-databaskonstruktion/Views/Agents/FieldAgentDetails.cshtml
@@ -0,0 +1,2 @@
+<h3>Agent is part of Operations:</h3>
+<partial name="_TablePartial" model="ViewBag.AgentOperations" />
+\ No newline at end of file
diff --git a/MVC-databaskonstruktion/Views/Shared/_TablePartial.cshtml b/MVC-databaskonstruktion/Views/Shared/_TablePartial.cshtml
@@ -3,6 +3,8 @@
@{
var dataTable = Model.DataSet;
+ var urlQuery = new RouteValueDictionary();
+ var deleteQuery = new RouteValueDictionary();
}
<table class="table table-striped table-bordered">
@@ -14,7 +16,13 @@
@column.ColumnName
</th>
}
- @if (!string.IsNullOrEmpty(Model.DeleteTable) && Model.PrimaryKeys?.Count > 0)
+ @if (!string.IsNullOrEmpty(Model.Redirect))
+ {
+ <th scope="col">
+ Details
+ </th>
+ }
+ @if (!string.IsNullOrEmpty(Model.DeleteTable))
{
<th scope="col">
Delete
@@ -32,19 +40,25 @@
@row[col]
</td>
}
-
- @if (!string.IsNullOrEmpty(Model.DeleteTable) && Model.PrimaryKeys?.Count > 0)
+ @if (Model.PrimaryKeys?.Count > 0)
{
- <td>
- @{
- var deleteParams = new RouteValueDictionary();
- deleteParams["Table"] = Model.DeleteTable;
- foreach (var key in Model.PrimaryKeys)
- {
- deleteParams[key] = row[key];
- }
+ foreach (var key in Model.PrimaryKeys)
+ {
+ urlQuery[key] = row[key];
}
- @Html.ActionLink("Delete", "Delete", Model.ControllerName, deleteParams, new { @class = "btn btn-danger" })
+ deleteQuery = new RouteValueDictionary(urlQuery);
+ deleteQuery["Table"] = Model.DeleteTable;
+ }
+ @if (!string.IsNullOrEmpty(Model.Redirect))
+ {
+ <td>
+ @Html.ActionLink("Details", Model.Redirect, Model.ControllerName, urlQuery, new { @class = "btn btn-info" })
+ </td>
+ }
+ @if (!string.IsNullOrEmpty(Model.DeleteTable))
+ {
+ <td>
+ @Html.ActionLink("Delete", "Delete", Model.ControllerName, deleteQuery, new { @class = "btn btn-danger" })
</td>
}
</tr>