profileShare

rasmusjy / splitapp-backend-clean-onion

Read-only snapshot

No repository description.

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