feat: Add Lawn Care Tips section and improve Dashboard layout
This commit introduces a new "Lawn Care Tips" section to the application and refines the visual layout of the main Dashboard.
**Key Changes:**
*   **Lawn Care Tips Feature:**
    *   Added `LawnCareTip` model with `Title`, `Category`, and `Content` properties.
    *   Defined `TipCategory` enum for better organization (Mowing, Watering, Fertilizing, Weed Control, Aeration, General).
    *   Integrated `LawnCareTip` into `ApplicationDbContext` for database persistence.
    *   Updated `_Layout.cshtml` to include a new "Lawn Tips" navigation link.
*   **Dashboard Layout Fix:**
    *   Refactored `Views/Home/Index.cshtml` to correctly use Bootstrap's grid system by placing the "Log a New Activity" card in its own `div.row`. This resolves the layout issue where the card was appearing immediately after the previous row without proper spacing.
    *   Updated `HomeController` to include a `LastAerationDate` query for the dashboard display.
    *   Modified `DashboardViewModel` to include `LastAerationDate`.
*   **Build/Dependency Updates:**
    *   Added `Microsoft.EntityFrameworkCore.SqlServer` (likely a residue from scaffolding, though SQLite is still primary).
    *   Added `Microsoft.VisualStudio.Web.CodeGeneration.Design` for scaffolding tools.
This enhances the application's functionality by providing a knowledge base and improves the user experience with a cleaner dashboard layout.
			
			
This commit is contained in:
		
							parent
							
								
									1f50fedb80
								
							
						
					
					
						commit
						5074a9664a
					
				
					 17 changed files with 689 additions and 18 deletions
				
			
		
							
								
								
									
										40
									
								
								Views/LawnCareTip/Create.cshtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								Views/LawnCareTip/Create.cshtml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,40 @@ | |||
| @model turf_tasker.Models.LawnCareTip | ||||
| 
 | ||||
| @{ | ||||
|     ViewData["Title"] = "Create"; | ||||
| } | ||||
| 
 | ||||
| <h1>Create</h1> | ||||
| 
 | ||||
| <h4>LawnCareTip</h4> | ||||
| <hr /> | ||||
| <div class="row"> | ||||
|     <div class="col-md-4"> | ||||
|         <form asp-action="Create"> | ||||
|             <div asp-validation-summary="ModelOnly" class="text-danger"></div> | ||||
|             <div class="form-group"> | ||||
|                 <label asp-for="Title" class="control-label"></label> | ||||
|                 <input asp-for="Title" class="form-control" /> | ||||
|                 <span asp-validation-for="Title" class="text-danger"></span> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|                 <label asp-for="Category" class="control-label"></label> | ||||
|                 <select asp-for="Category" class="form-control"></select> | ||||
|                 <span asp-validation-for="Category" class="text-danger"></span> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|                 <label asp-for="Content" class="control-label"></label> | ||||
|                 <textarea asp-for="Content" class="form-control"></textarea> | ||||
|                 <span asp-validation-for="Content" class="text-danger"></span> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|                 <input type="submit" value="Create" class="btn btn-primary" /> | ||||
|             </div> | ||||
|         </form> | ||||
|     </div> | ||||
| </div> | ||||
| 
 | ||||
| <div> | ||||
|     <a asp-action="Index">Back to List</a> | ||||
| </div> | ||||
| 
 | ||||
							
								
								
									
										39
									
								
								Views/LawnCareTip/Delete.cshtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								Views/LawnCareTip/Delete.cshtml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,39 @@ | |||
| @model turf_tasker.Models.LawnCareTip | ||||
| 
 | ||||
| @{ | ||||
|     ViewData["Title"] = "Delete"; | ||||
| } | ||||
| 
 | ||||
| <h1>Delete</h1> | ||||
| 
 | ||||
| <h3>Are you sure you want to delete this?</h3> | ||||
| <div> | ||||
|     <h4>LawnCareTip</h4> | ||||
|     <hr /> | ||||
|     <dl class="row"> | ||||
|         <dt class = "col-sm-2"> | ||||
|             @Html.DisplayNameFor(model => model.Title) | ||||
|         </dt> | ||||
|         <dd class = "col-sm-10"> | ||||
|             @Html.DisplayFor(model => model.Title) | ||||
|         </dd> | ||||
|         <dt class = "col-sm-2"> | ||||
|             @Html.DisplayNameFor(model => model.Category) | ||||
|         </dt> | ||||
|         <dd class = "col-sm-10"> | ||||
|             @Html.DisplayFor(model => model.Category) | ||||
|         </dd> | ||||
|         <dt class = "col-sm-2"> | ||||
|             @Html.DisplayNameFor(model => model.Content) | ||||
|         </dt> | ||||
|         <dd class = "col-sm-10"> | ||||
|             @Html.DisplayFor(model => model.Content) | ||||
|         </dd> | ||||
|     </dl> | ||||
|      | ||||
|     <form asp-action="Delete"> | ||||
|         <input type="hidden" asp-for="Id" /> | ||||
|         <input type="submit" value="Delete" class="btn btn-danger" /> | | ||||
|         <a asp-action="Index">Back to List</a> | ||||
|     </form> | ||||
| </div> | ||||
							
								
								
									
										36
									
								
								Views/LawnCareTip/Details.cshtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								Views/LawnCareTip/Details.cshtml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| @model turf_tasker.Models.LawnCareTip | ||||
| 
 | ||||
| @{ | ||||
|     ViewData["Title"] = "Details"; | ||||
| } | ||||
| 
 | ||||
| <h1>Details</h1> | ||||
| 
 | ||||
| <div> | ||||
|     <h4>LawnCareTip</h4> | ||||
|     <hr /> | ||||
|     <dl class="row"> | ||||
|         <dt class = "col-sm-2"> | ||||
|             @Html.DisplayNameFor(model => model.Title) | ||||
|         </dt> | ||||
|         <dd class = "col-sm-10"> | ||||
|             @Html.DisplayFor(model => model.Title) | ||||
|         </dd> | ||||
|         <dt class = "col-sm-2"> | ||||
|             @Html.DisplayNameFor(model => model.Category) | ||||
|         </dt> | ||||
|         <dd class = "col-sm-10"> | ||||
|             @Html.DisplayFor(model => model.Category) | ||||
|         </dd> | ||||
|         <dt class = "col-sm-2"> | ||||
|             @Html.DisplayNameFor(model => model.Content) | ||||
|         </dt> | ||||
|         <dd class = "col-sm-10"> | ||||
|             @Html.DisplayFor(model => model.Content) | ||||
|         </dd> | ||||
|     </dl> | ||||
| </div> | ||||
| <div> | ||||
|     <a asp-action="Edit" asp-route-id="@Model?.Id">Edit</a> | | ||||
|     <a asp-action="Index">Back to List</a> | ||||
| </div> | ||||
							
								
								
									
										41
									
								
								Views/LawnCareTip/Edit.cshtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								Views/LawnCareTip/Edit.cshtml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | |||
| @model turf_tasker.Models.LawnCareTip | ||||
| 
 | ||||
| @{ | ||||
|     ViewData["Title"] = "Edit"; | ||||
| } | ||||
| 
 | ||||
| <h1>Edit</h1> | ||||
| 
 | ||||
| <h4>LawnCareTip</h4> | ||||
| <hr /> | ||||
| <div class="row"> | ||||
|     <div class="col-md-4"> | ||||
|         <form asp-action="Edit"> | ||||
|             <div asp-validation-summary="ModelOnly" class="text-danger"></div> | ||||
|             <input type="hidden" asp-for="Id" /> | ||||
|             <div class="form-group"> | ||||
|                 <label asp-for="Title" class="control-label"></label> | ||||
|                 <input asp-for="Title" class="form-control" /> | ||||
|                 <span asp-validation-for="Title" class="text-danger"></span> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|                 <label asp-for="Category" class="control-label"></label> | ||||
|                 <select asp-for="Category" class="form-control"></select> | ||||
|                 <span asp-validation-for="Category" class="text-danger"></span> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|                 <label asp-for="Content" class="control-label"></label> | ||||
|                 <textarea asp-for="Content" class="form-control"></textarea> | ||||
|                 <span asp-validation-for="Content" class="text-danger"></span> | ||||
|             </div> | ||||
|             <div class="form-group"> | ||||
|                 <input type="submit" value="Save" class="btn btn-primary" /> | ||||
|             </div> | ||||
|         </form> | ||||
|     </div> | ||||
| </div> | ||||
| 
 | ||||
| <div> | ||||
|     <a asp-action="Index">Back to List</a> | ||||
| </div> | ||||
| 
 | ||||
							
								
								
									
										47
									
								
								Views/LawnCareTip/Index.cshtml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								Views/LawnCareTip/Index.cshtml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,47 @@ | |||
| @model IEnumerable<turf_tasker.Models.LawnCareTip> | ||||
| 
 | ||||
| @{ | ||||
|     ViewData["Title"] = "Index"; | ||||
| } | ||||
| 
 | ||||
| <h1>Index</h1> | ||||
| 
 | ||||
| <p> | ||||
|     <a asp-action="Create">Create New</a> | ||||
| </p> | ||||
| <table class="table"> | ||||
|     <thead> | ||||
|         <tr> | ||||
|             <th> | ||||
|                 @Html.DisplayNameFor(model => model.Title) | ||||
|             </th> | ||||
|             <th> | ||||
|                 @Html.DisplayNameFor(model => model.Category) | ||||
|             </th> | ||||
|             <th> | ||||
|                 @Html.DisplayNameFor(model => model.Content) | ||||
|             </th> | ||||
|             <th></th> | ||||
|         </tr> | ||||
|     </thead> | ||||
|     <tbody> | ||||
| @foreach (var item in Model) { | ||||
|         <tr> | ||||
|             <td> | ||||
|                 @Html.DisplayFor(modelItem => item.Title) | ||||
|             </td> | ||||
|             <td> | ||||
|                 @Html.DisplayFor(modelItem => item.Category) | ||||
|             </td> | ||||
|             <td> | ||||
|                 @Html.DisplayFor(modelItem => item.Content) | ||||
|             </td> | ||||
|             <td> | ||||
|                 <a asp-action="Edit" asp-route-id="@item.Id">Edit</a> | | ||||
|                 <a asp-action="Details" asp-route-id="@item.Id">Details</a> | | ||||
|                 <a asp-action="Delete" asp-route-id="@item.Id">Delete</a> | ||||
|             </td> | ||||
|         </tr> | ||||
| } | ||||
|     </tbody> | ||||
| </table> | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Blake Ridgway
						Blake Ridgway