profileShare

rasmusjy / splitapp-backend-modular-monolith

Read-only snapshot

No repository description.

main default branch 418 files Expires Sep 13, 2026, 9:06 AM
SettlementPlansController.cs 6,391 bytes
1 using SplitApp.WebApp.Application.DTO;
2 using SplitApp.WebApp.Application.Services.Admin;
3 using SplitApp.Modules.Trips.Domain.Entities;
4 using SplitApp.Modules.Trips.Domain.Enums;
5 using SplitApp.Modules.Expenses.Domain.Entities;
6 using SplitApp.Modules.Expenses.Domain.Enums;
7 using SplitApp.Modules.Users.Domain.Entities;
8 using Microsoft.AspNetCore.Authorization;
9 using Microsoft.AspNetCore.Mvc;
10 using Microsoft.AspNetCore.Mvc.Rendering;
11 using Microsoft.EntityFrameworkCore;
12 using Microsoft.Extensions.Localization;
13 using SplitApp.WebApp.Areas.Admin.Models;
14
15 namespace SplitApp.WebApp.Areas.Admin.Controllers
16 {
17 [Area("Admin")]
18 [Authorize(Roles = "admin")]
19 public class SettlementPlansController : Controller
20 {
21 private readonly ISettlementPlanAdminService _service;
22 private readonly IStringLocalizer<App.Resources.Views.Shared> _l;
23
24 public SettlementPlansController(ISettlementPlanAdminService service,
25 IStringLocalizer<App.Resources.Views.Shared> l)
26 {
27 _service = service;
28 _l = l;
29 }
30
31 // GET: Admin/SettlementPlans
32 public async Task<IActionResult> Index(Guid? tripId)
33 {
34 var plans = await _service.GetAllAsync(tripId);
35
36 var vm = new AdminSettlementPlanIndexViewModel
37 {
38 Title = _l["Settlement plans"].Value,
39 Items = plans.OrderByDescending(s => s.Id).ToList(),
40 Trips = (await _service.GetTripsAsync()).OrderBy(t => t.Name).ToList(),
41 CurrentTripId = tripId
42 };
43 return View(vm);
44 }
45
46 // GET: Admin/SettlementPlans/Details/5
47 public async Task<IActionResult> Details(Guid? id)
48 {
49 if (id == null)
50 {
51 return NotFound();
52 }
53
54 var settlementPlan = await _service.GetByIdAsync(id.Value);
55 if (settlementPlan == null)
56 {
57 return NotFound();
58 }
59
60 return View(new AdminDetailsViewModel<SettlementPlanBllDto>
61 {
62 Title = _l["Settlement plan details"].Value,
63 Item = settlementPlan
64 });
65 }
66
67 // GET: Admin/SettlementPlans/Create
68 public async Task<IActionResult> Create()
69 {
70 var vm = new AdminSettlementPlanFormViewModel
71 {
72 Title = _l["New settlement plan"].Value,
73 TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name"),
74 UserList = new SelectList(await _service.GetUsersAsync(), "Id", "Email")
75 };
76 return View(vm);
77 }
78
79 // POST: Admin/SettlementPlans/Create
80 [HttpPost]
81 [ValidateAntiForgeryToken]
82 public async Task<IActionResult> Create(AdminSettlementPlanFormViewModel vm)
83 {
84 if (ModelState.IsValid)
85 {
86 await _service.CreateAsync(vm.SettlementPlan);
87 return RedirectToAction(nameof(Index));
88 }
89
90 vm.Title = _l["New settlement plan"].Value;
91 vm.TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name", vm.SettlementPlan.TripId);
92 vm.UserList = new SelectList(await _service.GetUsersAsync(), "Id", "Email", vm.SettlementPlan.CreatedByUserId);
93 return View(vm);
94 }
95
96 // GET: Admin/SettlementPlans/Edit/5
97 public async Task<IActionResult> Edit(Guid? id)
98 {
99 if (id == null)
100 {
101 return NotFound();
102 }
103
104 var settlementPlan = await _service.GetByIdAsync(id.Value);
105 if (settlementPlan == null)
106 {
107 return NotFound();
108 }
109
110 var vm = new AdminSettlementPlanFormViewModel
111 {
112 Title = _l["Edit settlement plan"].Value,
113 SettlementPlan = settlementPlan,
114 TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name", settlementPlan.TripId),
115 UserList = new SelectList(await _service.GetUsersAsync(), "Id", "Email", settlementPlan.CreatedByUserId)
116 };
117 return View(vm);
118 }
119
120 // POST: Admin/SettlementPlans/Edit/5
121 [HttpPost]
122 [ValidateAntiForgeryToken]
123 public async Task<IActionResult> Edit(Guid id, AdminSettlementPlanFormViewModel vm)
124 {
125 if (id != vm.SettlementPlan.Id)
126 {
127 return NotFound();
128 }
129
130 if (ModelState.IsValid)
131 {
132 try
133 {
134 await _service.UpdateAsync(vm.SettlementPlan);
135 }
136 catch (DbUpdateConcurrencyException)
137 {
138 if (!await _service.ExistsAsync(vm.SettlementPlan.Id))
139 {
140 return NotFound();
141 }
142 else
143 {
144 throw;
145 }
146 }
147
148 return RedirectToAction(nameof(Index));
149 }
150
151 vm.Title = _l["Edit settlement plan"].Value;
152 vm.TripList = new SelectList(await _service.GetTripsAsync(), "Id", "Name", vm.SettlementPlan.TripId);
153 vm.UserList = new SelectList(await _service.GetUsersAsync(), "Id", "Email", vm.SettlementPlan.CreatedByUserId);
154 return View(vm);
155 }
156
157 // GET: Admin/SettlementPlans/Delete/5
158 public async Task<IActionResult> Delete(Guid? id)
159 {
160 if (id == null)
161 {
162 return NotFound();
163 }
164
165 var settlementPlan = await _service.GetByIdAsync(id.Value);
166 if (settlementPlan == null)
167 {
168 return NotFound();
169 }
170
171 return View(new AdminDeleteViewModel<SettlementPlanBllDto>
172 {
173 Title = _l["Delete settlement plan"].Value,
174 Item = settlementPlan
175 });
176 }
177
178 // POST: Admin/SettlementPlans/Delete/5
179 [HttpPost, ActionName("Delete")]
180 [ValidateAntiForgeryToken]
181 public async Task<IActionResult> DeleteConfirmed(Guid id)
182 {
183 await _service.DeleteAsync(id);
184 return RedirectToAction(nameof(Index));
185 }
186 }
187 }
188