Skip to content

Commit 578668f

Browse files
authored
Merge pull request #1186 from hargata/Hargata/1185
Version 1.5.7 changes
2 parents 8609309 + bc35b38 commit 578668f

66 files changed

Lines changed: 6449 additions & 3561 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Lines changed: 224 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,224 @@
1+
using CarCareTracker.Filter;
2+
using CarCareTracker.Helper;
3+
using CarCareTracker.Models;
4+
using Microsoft.AspNetCore.Mvc;
5+
6+
namespace CarCareTracker.Controllers
7+
{
8+
public partial class APIController
9+
{
10+
[HttpGet]
11+
[Route("/api/vehicle/equipmentrecords/all")]
12+
public IActionResult AllEquipmentRecords(MethodParameter parameters)
13+
{
14+
List<int> vehicleIds = new List<int>();
15+
var vehicles = _dataAccess.GetVehicles();
16+
if (!User.IsInRole(nameof(UserData.IsRootUser)))
17+
{
18+
vehicles = _userLogic.FilterUserVehicles(vehicles, GetUserID());
19+
}
20+
vehicleIds.AddRange(vehicles.Select(x => x.Id));
21+
List<EquipmentRecordViewModel> vehicleRecords = new List<EquipmentRecordViewModel>();
22+
foreach (int vehicleId in vehicleIds)
23+
{
24+
var equipmentRecords = _equipmentRecordDataAccess.GetEquipmentRecordsByVehicleId(vehicleId);
25+
var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
26+
var convertedRecords = _equipmentHelper.GetEquipmentRecordViewModels(equipmentRecords, odometerRecords);
27+
vehicleRecords.AddRange(convertedRecords);
28+
}
29+
if (parameters.Id != default)
30+
{
31+
vehicleRecords.RemoveAll(x => x.Id != parameters.Id);
32+
}
33+
if (!string.IsNullOrWhiteSpace(parameters.Tags))
34+
{
35+
var tagsFilter = parameters.Tags.Split(' ').Distinct();
36+
vehicleRecords.RemoveAll(x => !x.Tags.Any(y => tagsFilter.Contains(y)));
37+
}
38+
var result = vehicleRecords.Select(x => new EquipmentRecordAPIExportModel { Id = x.Id.ToString(), Description = x.Description, IsEquipped = x.IsEquipped.ToString(), DistanceTraveled = x.DistanceTraveled.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
39+
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
40+
{
41+
return Json(result, StaticHelper.GetInvariantOption());
42+
}
43+
else
44+
{
45+
return Json(result);
46+
}
47+
}
48+
[TypeFilter(typeof(CollaboratorFilter))]
49+
[HttpGet]
50+
[Route("/api/vehicle/equipmentrecords")]
51+
public IActionResult EquipmentRecords(int vehicleId, MethodParameter parameters)
52+
{
53+
if (vehicleId == default)
54+
{
55+
var response = OperationResponse.Failed("Must provide a valid vehicle id");
56+
Response.StatusCode = 400;
57+
return Json(response);
58+
}
59+
var vehicleRecords = _equipmentRecordDataAccess.GetEquipmentRecordsByVehicleId(vehicleId);
60+
if (parameters.Id != default)
61+
{
62+
vehicleRecords.RemoveAll(x => x.Id != parameters.Id);
63+
}
64+
if (!string.IsNullOrWhiteSpace(parameters.Tags))
65+
{
66+
var tagsFilter = parameters.Tags.Split(' ').Distinct();
67+
vehicleRecords.RemoveAll(x => !x.Tags.Any(y => tagsFilter.Contains(y)));
68+
}
69+
var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(vehicleId);
70+
var convertedRecords = _equipmentHelper.GetEquipmentRecordViewModels(vehicleRecords, odometerRecords);
71+
var result = convertedRecords.Select(x => new EquipmentRecordAPIExportModel { Id = x.Id.ToString(), Description = x.Description, IsEquipped = x.IsEquipped.ToString(), DistanceTraveled = x.DistanceTraveled.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
72+
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
73+
{
74+
return Json(result, StaticHelper.GetInvariantOption());
75+
}
76+
else
77+
{
78+
return Json(result);
79+
}
80+
}
81+
[TypeFilter(typeof(CollaboratorFilter), Arguments = new object[] { false, true, HouseholdPermission.Edit })]
82+
[HttpPost]
83+
[Route("/api/vehicle/equipmentrecords/add")]
84+
[Consumes("application/json")]
85+
public IActionResult AddEquipmentRecordJson(int vehicleId, [FromBody] EquipmentRecordExportModel input) => AddEquipmentRecord(vehicleId, input);
86+
[TypeFilter(typeof(CollaboratorFilter), Arguments = new object[] { false, true, HouseholdPermission.Edit })]
87+
[HttpPost]
88+
[Route("/api/vehicle/equipmentrecords/add")]
89+
public IActionResult AddEquipmentRecord(int vehicleId, EquipmentRecordExportModel input)
90+
{
91+
if (vehicleId == default)
92+
{
93+
Response.StatusCode = 400;
94+
return Json(OperationResponse.Failed("Must provide a valid vehicle id"));
95+
}
96+
if (string.IsNullOrWhiteSpace(input.Description) ||
97+
string.IsNullOrWhiteSpace(input.IsEquipped))
98+
{
99+
Response.StatusCode = 400;
100+
return Json(OperationResponse.Failed("Input object invalid, Description and IsEquipped cannot be empty."));
101+
}
102+
if (input.Files == null)
103+
{
104+
input.Files = new List<UploadedFiles>();
105+
}
106+
if (input.ExtraFields == null)
107+
{
108+
input.ExtraFields = new List<ExtraField>();
109+
}
110+
try
111+
{
112+
var equipmentRecord = new EquipmentRecord()
113+
{
114+
VehicleId = vehicleId,
115+
Description = input.Description,
116+
IsEquipped = bool.Parse(input.IsEquipped),
117+
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
118+
ExtraFields = input.ExtraFields,
119+
Files = input.Files,
120+
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
121+
};
122+
_equipmentRecordDataAccess.SaveEquipmentRecordToVehicle(equipmentRecord);
123+
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromEquipmentRecord(equipmentRecord, "equipmentrecord.add.api", User.Identity.Name));
124+
return Json(OperationResponse.Succeed("Equipment Record Added", new { recordId = equipmentRecord.Id }));
125+
}
126+
catch (Exception ex)
127+
{
128+
Response.StatusCode = 500;
129+
return Json(OperationResponse.Failed(ex.Message));
130+
}
131+
}
132+
[HttpDelete]
133+
[Route("/api/vehicle/equipmentrecords/delete")]
134+
public IActionResult DeleteEquipmentRecord(int id)
135+
{
136+
var existingRecord = _equipmentRecordDataAccess.GetEquipmentRecordById(id);
137+
if (existingRecord == null || existingRecord.Id == default)
138+
{
139+
Response.StatusCode = 400;
140+
return Json(OperationResponse.Failed("Invalid Record Id"));
141+
}
142+
//security check.
143+
if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId, HouseholdPermission.Delete))
144+
{
145+
Response.StatusCode = 401;
146+
return Json(OperationResponse.Failed("Access Denied, you don't have access to this vehicle."));
147+
}
148+
//delete link to odometer record
149+
var odometerRecords = _odometerRecordDataAccess.GetOdometerRecordsByVehicleId(existingRecord.VehicleId);
150+
var linkedOdometerRecords = odometerRecords.Where(x => x.EquipmentRecordId.Contains(existingRecord.Id));
151+
if (linkedOdometerRecords.Any())
152+
{
153+
foreach (OdometerRecord linkedOdometerRecord in linkedOdometerRecords)
154+
{
155+
linkedOdometerRecord.EquipmentRecordId.RemoveAll(x => x == existingRecord.Id);
156+
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(linkedOdometerRecord);
157+
}
158+
}
159+
var result = _equipmentRecordDataAccess.DeleteEquipmentRecordById(existingRecord.Id);
160+
if (result)
161+
{
162+
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromEquipmentRecord(existingRecord, "equipmentrecord.delete.api", User.Identity.Name));
163+
}
164+
return Json(OperationResponse.Conditional(result, "Equipment Record Deleted"));
165+
}
166+
[HttpPut]
167+
[Route("/api/vehicle/equipmentrecords/update")]
168+
[Consumes("application/json")]
169+
public IActionResult UpdateEquipmentRecordJson([FromBody] EquipmentRecordExportModel input) => UpdateEquipmentRecord(input);
170+
[HttpPut]
171+
[Route("/api/vehicle/equipmentrecords/update")]
172+
public IActionResult UpdateEquipmentRecord(EquipmentRecordExportModel input)
173+
{
174+
if (string.IsNullOrWhiteSpace(input.Id) ||
175+
string.IsNullOrWhiteSpace(input.Description) ||
176+
string.IsNullOrWhiteSpace(input.IsEquipped))
177+
{
178+
Response.StatusCode = 400;
179+
return Json(OperationResponse.Failed("Input object invalid, Id, Description, and IsEquipped cannot be empty."));
180+
}
181+
if (input.Files == null)
182+
{
183+
input.Files = new List<UploadedFiles>();
184+
}
185+
if (input.ExtraFields == null)
186+
{
187+
input.ExtraFields = new List<ExtraField>();
188+
}
189+
try
190+
{
191+
//retrieve existing record
192+
var existingRecord = _equipmentRecordDataAccess.GetEquipmentRecordById(int.Parse(input.Id));
193+
if (existingRecord != null && existingRecord.Id == int.Parse(input.Id))
194+
{
195+
//check if user has access to the vehicleId
196+
if (!_userLogic.UserCanEditVehicle(GetUserID(), existingRecord.VehicleId, HouseholdPermission.Edit))
197+
{
198+
Response.StatusCode = 401;
199+
return Json(OperationResponse.Failed("Access Denied, you don't have access to this vehicle."));
200+
}
201+
existingRecord.Description = input.Description;
202+
existingRecord.IsEquipped = bool.Parse(input.IsEquipped);
203+
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
204+
existingRecord.ExtraFields = input.ExtraFields;
205+
existingRecord.Files = input.Files;
206+
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
207+
_equipmentRecordDataAccess.SaveEquipmentRecordToVehicle(existingRecord);
208+
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromEquipmentRecord(existingRecord, "equipmentrecord.update.api", User.Identity.Name));
209+
}
210+
else
211+
{
212+
Response.StatusCode = 400;
213+
return Json(OperationResponse.Failed("Invalid Record Id"));
214+
}
215+
return Json(OperationResponse.Succeed("Equipment Record Updated"));
216+
}
217+
catch (Exception ex)
218+
{
219+
Response.StatusCode = 500;
220+
return Json(OperationResponse.Failed(ex.Message));
221+
}
222+
}
223+
}
224+
}

0 commit comments

Comments
 (0)