Merge pull request #788 from hargata/Hargata/769
Document Upload Endpoint
This commit is contained in:
@@ -34,6 +34,7 @@ namespace CarCareTracker.Controllers
|
|||||||
private readonly IFileHelper _fileHelper;
|
private readonly IFileHelper _fileHelper;
|
||||||
private readonly IMailHelper _mailHelper;
|
private readonly IMailHelper _mailHelper;
|
||||||
private readonly IConfigHelper _config;
|
private readonly IConfigHelper _config;
|
||||||
|
private readonly IWebHostEnvironment _webEnv;
|
||||||
public APIController(IVehicleDataAccess dataAccess,
|
public APIController(IVehicleDataAccess dataAccess,
|
||||||
IGasHelper gasHelper,
|
IGasHelper gasHelper,
|
||||||
IReminderHelper reminderHelper,
|
IReminderHelper reminderHelper,
|
||||||
@@ -55,7 +56,8 @@ namespace CarCareTracker.Controllers
|
|||||||
IConfigHelper config,
|
IConfigHelper config,
|
||||||
IUserLogic userLogic,
|
IUserLogic userLogic,
|
||||||
IVehicleLogic vehicleLogic,
|
IVehicleLogic vehicleLogic,
|
||||||
IOdometerLogic odometerLogic)
|
IOdometerLogic odometerLogic,
|
||||||
|
IWebHostEnvironment webEnv)
|
||||||
{
|
{
|
||||||
_dataAccess = dataAccess;
|
_dataAccess = dataAccess;
|
||||||
_noteDataAccess = noteDataAccess;
|
_noteDataAccess = noteDataAccess;
|
||||||
@@ -79,6 +81,7 @@ namespace CarCareTracker.Controllers
|
|||||||
_vehicleLogic = vehicleLogic;
|
_vehicleLogic = vehicleLogic;
|
||||||
_fileHelper = fileHelper;
|
_fileHelper = fileHelper;
|
||||||
_config = config;
|
_config = config;
|
||||||
|
_webEnv = webEnv;
|
||||||
}
|
}
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
@@ -163,7 +166,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var vehicleRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _serviceRecordDataAccess.GetServiceRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields, Tags = string.Join(' ', x.Tags) });
|
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
|
||||||
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
||||||
{
|
{
|
||||||
return Json(result, StaticHelper.GetInvariantOption());
|
return Json(result, StaticHelper.GetInvariantOption());
|
||||||
@@ -206,6 +209,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Cost = decimal.Parse(input.Cost),
|
Cost = decimal.Parse(input.Cost),
|
||||||
ExtraFields = input.ExtraFields,
|
ExtraFields = input.ExtraFields,
|
||||||
|
Files = input.Files,
|
||||||
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
||||||
};
|
};
|
||||||
_serviceRecordDataAccess.SaveServiceRecordToVehicle(serviceRecord);
|
_serviceRecordDataAccess.SaveServiceRecordToVehicle(serviceRecord);
|
||||||
@@ -291,6 +295,7 @@ namespace CarCareTracker.Controllers
|
|||||||
existingRecord.Description = input.Description;
|
existingRecord.Description = input.Description;
|
||||||
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
existingRecord.Cost = decimal.Parse(input.Cost);
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
|
existingRecord.Files = input.Files;
|
||||||
existingRecord.ExtraFields = input.ExtraFields;
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
||||||
_serviceRecordDataAccess.SaveServiceRecordToVehicle(existingRecord);
|
_serviceRecordDataAccess.SaveServiceRecordToVehicle(existingRecord);
|
||||||
@@ -322,7 +327,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var vehicleRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _collisionRecordDataAccess.GetCollisionRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields, Tags = string.Join(' ', x.Tags) });
|
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
|
||||||
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
||||||
{
|
{
|
||||||
return Json(result, StaticHelper.GetInvariantOption());
|
return Json(result, StaticHelper.GetInvariantOption());
|
||||||
@@ -366,6 +371,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Cost = decimal.Parse(input.Cost),
|
Cost = decimal.Parse(input.Cost),
|
||||||
ExtraFields = input.ExtraFields,
|
ExtraFields = input.ExtraFields,
|
||||||
|
Files = input.Files,
|
||||||
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
||||||
};
|
};
|
||||||
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(repairRecord);
|
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(repairRecord);
|
||||||
@@ -453,6 +459,7 @@ namespace CarCareTracker.Controllers
|
|||||||
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
existingRecord.Cost = decimal.Parse(input.Cost);
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
existingRecord.ExtraFields = input.ExtraFields;
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Files = input.Files;
|
||||||
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
||||||
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(existingRecord);
|
_collisionRecordDataAccess.SaveCollisionRecordToVehicle(existingRecord);
|
||||||
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "repairrecord.update.api", User.Identity.Name));
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "repairrecord.update.api", User.Identity.Name));
|
||||||
@@ -484,7 +491,7 @@ namespace CarCareTracker.Controllers
|
|||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var vehicleRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
var vehicleRecords = _upgradeRecordDataAccess.GetUpgradeRecordsByVehicleId(vehicleId);
|
||||||
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields, Tags = string.Join(' ', x.Tags) });
|
var result = vehicleRecords.Select(x => new GenericRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, Odometer = x.Mileage.ToString(), ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
|
||||||
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
||||||
{
|
{
|
||||||
return Json(result, StaticHelper.GetInvariantOption());
|
return Json(result, StaticHelper.GetInvariantOption());
|
||||||
@@ -528,6 +535,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Cost = decimal.Parse(input.Cost),
|
Cost = decimal.Parse(input.Cost),
|
||||||
ExtraFields = input.ExtraFields,
|
ExtraFields = input.ExtraFields,
|
||||||
|
Files = input.Files,
|
||||||
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
||||||
};
|
};
|
||||||
_upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(upgradeRecord);
|
_upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(upgradeRecord);
|
||||||
@@ -614,6 +622,7 @@ namespace CarCareTracker.Controllers
|
|||||||
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
existingRecord.Cost = decimal.Parse(input.Cost);
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
existingRecord.ExtraFields = input.ExtraFields;
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Files = input.Files;
|
||||||
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
||||||
_upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(existingRecord);
|
_upgradeRecordDataAccess.SaveUpgradeRecordToVehicle(existingRecord);
|
||||||
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "upgraderecord.update.api", User.Identity.Name));
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromGenericRecord(existingRecord, "upgraderecord.update.api", User.Identity.Name));
|
||||||
@@ -644,7 +653,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Response.StatusCode = 400;
|
Response.StatusCode = 400;
|
||||||
return Json(response);
|
return Json(response);
|
||||||
}
|
}
|
||||||
var result = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId).Select(x => new TaxRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields, Tags = string.Join(' ', x.Tags) });
|
var result = _taxRecordDataAccess.GetTaxRecordsByVehicleId(vehicleId).Select(x => new TaxRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), Description = x.Description, Cost = x.Cost.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
|
||||||
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
||||||
{
|
{
|
||||||
return Json(result, StaticHelper.GetInvariantOption());
|
return Json(result, StaticHelper.GetInvariantOption());
|
||||||
@@ -721,6 +730,7 @@ namespace CarCareTracker.Controllers
|
|||||||
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes,
|
||||||
Cost = decimal.Parse(input.Cost),
|
Cost = decimal.Parse(input.Cost),
|
||||||
ExtraFields = input.ExtraFields,
|
ExtraFields = input.ExtraFields,
|
||||||
|
Files = input.Files,
|
||||||
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
||||||
};
|
};
|
||||||
_taxRecordDataAccess.SaveTaxRecordToVehicle(taxRecord);
|
_taxRecordDataAccess.SaveTaxRecordToVehicle(taxRecord);
|
||||||
@@ -790,6 +800,7 @@ namespace CarCareTracker.Controllers
|
|||||||
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
existingRecord.Cost = decimal.Parse(input.Cost);
|
existingRecord.Cost = decimal.Parse(input.Cost);
|
||||||
existingRecord.ExtraFields = input.ExtraFields;
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Files = input.Files;
|
||||||
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
||||||
_taxRecordDataAccess.SaveTaxRecordToVehicle(existingRecord);
|
_taxRecordDataAccess.SaveTaxRecordToVehicle(existingRecord);
|
||||||
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromTaxRecord(existingRecord, "taxrecord.update.api", User.Identity.Name));
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromTaxRecord(existingRecord, "taxrecord.update.api", User.Identity.Name));
|
||||||
@@ -840,7 +851,7 @@ namespace CarCareTracker.Controllers
|
|||||||
{
|
{
|
||||||
vehicleRecords = _odometerLogic.AutoConvertOdometerRecord(vehicleRecords);
|
vehicleRecords = _odometerLogic.AutoConvertOdometerRecord(vehicleRecords);
|
||||||
}
|
}
|
||||||
var result = vehicleRecords.Select(x => new OdometerRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), InitialOdometer = x.InitialMileage.ToString(), Odometer = x.Mileage.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields, Tags = string.Join(' ', x.Tags) });
|
var result = vehicleRecords.Select(x => new OdometerRecordExportModel { Id = x.Id.ToString(), Date = x.Date.ToShortDateString(), InitialOdometer = x.InitialMileage.ToString(), Odometer = x.Mileage.ToString(), Notes = x.Notes, ExtraFields = x.ExtraFields, Files = x.Files, Tags = string.Join(' ', x.Tags) });
|
||||||
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
||||||
{
|
{
|
||||||
return Json(result, StaticHelper.GetInvariantOption());
|
return Json(result, StaticHelper.GetInvariantOption());
|
||||||
@@ -881,6 +892,7 @@ namespace CarCareTracker.Controllers
|
|||||||
InitialMileage = (string.IsNullOrWhiteSpace(input.InitialOdometer) || int.Parse(input.InitialOdometer) == default) ? _odometerLogic.GetLastOdometerRecordMileage(vehicleId, new List<OdometerRecord>()) : int.Parse(input.InitialOdometer),
|
InitialMileage = (string.IsNullOrWhiteSpace(input.InitialOdometer) || int.Parse(input.InitialOdometer) == default) ? _odometerLogic.GetLastOdometerRecordMileage(vehicleId, new List<OdometerRecord>()) : int.Parse(input.InitialOdometer),
|
||||||
Mileage = int.Parse(input.Odometer),
|
Mileage = int.Parse(input.Odometer),
|
||||||
ExtraFields = input.ExtraFields,
|
ExtraFields = input.ExtraFields,
|
||||||
|
Files = input.Files,
|
||||||
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList()
|
||||||
};
|
};
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(odometerRecord);
|
||||||
@@ -948,6 +960,7 @@ namespace CarCareTracker.Controllers
|
|||||||
existingRecord.InitialMileage = int.Parse(input.InitialOdometer);
|
existingRecord.InitialMileage = int.Parse(input.InitialOdometer);
|
||||||
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
existingRecord.Notes = string.IsNullOrWhiteSpace(input.Notes) ? "" : input.Notes;
|
||||||
existingRecord.ExtraFields = input.ExtraFields;
|
existingRecord.ExtraFields = input.ExtraFields;
|
||||||
|
existingRecord.Files = input.Files;
|
||||||
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
existingRecord.Tags = string.IsNullOrWhiteSpace(input.Tags) ? new List<string>() : input.Tags.Split(' ').Distinct().ToList();
|
||||||
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(existingRecord);
|
_odometerRecordDataAccess.SaveOdometerRecordToVehicle(existingRecord);
|
||||||
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromOdometerRecord(existingRecord, "odometerrecord.update.api", User.Identity.Name));
|
StaticHelper.NotifyAsync(_config.GetWebHookUrl(), WebHookPayload.FromOdometerRecord(existingRecord, "odometerrecord.update.api", User.Identity.Name));
|
||||||
@@ -991,6 +1004,7 @@ namespace CarCareTracker.Controllers
|
|||||||
MissedFuelUp = x.MissedFuelUp.ToString(),
|
MissedFuelUp = x.MissedFuelUp.ToString(),
|
||||||
Notes = x.Notes,
|
Notes = x.Notes,
|
||||||
ExtraFields = x.ExtraFields,
|
ExtraFields = x.ExtraFields,
|
||||||
|
Files = x.Files,
|
||||||
Tags = string.Join(' ', x.Tags)
|
Tags = string.Join(' ', x.Tags)
|
||||||
});
|
});
|
||||||
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
if (_config.GetInvariantApi() || Request.Headers.ContainsKey("culture-invariant"))
|
||||||
@@ -1179,6 +1193,37 @@ namespace CarCareTracker.Controllers
|
|||||||
var calendarContent = StaticHelper.RemindersToCalendar(reminders);
|
var calendarContent = StaticHelper.RemindersToCalendar(reminders);
|
||||||
return File(calendarContent, "text/calendar");
|
return File(calendarContent, "text/calendar");
|
||||||
}
|
}
|
||||||
|
[HttpPost]
|
||||||
|
[Route("/api/documents/upload")]
|
||||||
|
public IActionResult UploadDocument(List<IFormFile> documents)
|
||||||
|
{
|
||||||
|
if (documents.Any())
|
||||||
|
{
|
||||||
|
List<UploadedFiles> uploadedFiles = new List<UploadedFiles>();
|
||||||
|
string uploadDirectory = "documents/";
|
||||||
|
string uploadPath = Path.Combine(_webEnv.ContentRootPath, "data", uploadDirectory);
|
||||||
|
if (!Directory.Exists(uploadPath))
|
||||||
|
Directory.CreateDirectory(uploadPath);
|
||||||
|
foreach (IFormFile document in documents)
|
||||||
|
{
|
||||||
|
string fileName = Guid.NewGuid() + Path.GetExtension(document.FileName);
|
||||||
|
string filePath = Path.Combine(uploadPath, fileName);
|
||||||
|
using (var stream = System.IO.File.Create(filePath))
|
||||||
|
{
|
||||||
|
document.CopyTo(stream);
|
||||||
|
}
|
||||||
|
uploadedFiles.Add(new UploadedFiles
|
||||||
|
{
|
||||||
|
Location = Path.Combine("/", uploadDirectory, fileName),
|
||||||
|
Name = Path.GetFileName(document.FileName)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return Json(uploadedFiles);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
return Json(OperationResponse.Failed("No files to upload"));
|
||||||
|
}
|
||||||
|
}
|
||||||
[Authorize(Roles = nameof(UserData.IsRootUser))]
|
[Authorize(Roles = nameof(UserData.IsRootUser))]
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
[Route("/api/vehicle/reminders/send")]
|
[Route("/api/vehicle/reminders/send")]
|
||||||
|
|||||||
@@ -76,7 +76,8 @@ namespace CarCareTracker.Helper
|
|||||||
MissedFuelUp = currentObject.MissedFuelUp,
|
MissedFuelUp = currentObject.MissedFuelUp,
|
||||||
Notes = currentObject.Notes,
|
Notes = currentObject.Notes,
|
||||||
Tags = currentObject.Tags,
|
Tags = currentObject.Tags,
|
||||||
ExtraFields = currentObject.ExtraFields
|
ExtraFields = currentObject.ExtraFields,
|
||||||
|
Files = currentObject.Files
|
||||||
};
|
};
|
||||||
if (currentObject.MissedFuelUp)
|
if (currentObject.MissedFuelUp)
|
||||||
{
|
{
|
||||||
@@ -130,7 +131,8 @@ namespace CarCareTracker.Helper
|
|||||||
MissedFuelUp = currentObject.MissedFuelUp,
|
MissedFuelUp = currentObject.MissedFuelUp,
|
||||||
Notes = currentObject.Notes,
|
Notes = currentObject.Notes,
|
||||||
Tags = currentObject.Tags,
|
Tags = currentObject.Tags,
|
||||||
ExtraFields = currentObject.ExtraFields
|
ExtraFields = currentObject.ExtraFields,
|
||||||
|
Files = currentObject.Files
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
previousMileage = currentObject.Mileage;
|
previousMileage = currentObject.Mileage;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public List<string> Tags { get; set; } = new List<string>();
|
public List<string> Tags { get; set; } = new List<string>();
|
||||||
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
public bool IncludeInAverage { get { return MilesPerGallon > 0 || (!IsFillToFull && !MissedFuelUp); } }
|
public bool IncludeInAverage { get { return MilesPerGallon > 0 || (!IsFillToFull && !MissedFuelUp); } }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ namespace CarCareTracker.Models
|
|||||||
public string Cost { get; set; }
|
public string Cost { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public string Tags { get; set; }
|
public string Tags { get; set; }
|
||||||
public List<ExtraField> ExtraFields { get; set; }
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
}
|
}
|
||||||
public class GenericRecordExportModel
|
public class GenericRecordExportModel
|
||||||
{
|
{
|
||||||
@@ -58,7 +58,8 @@ namespace CarCareTracker.Models
|
|||||||
[JsonConverter(typeof(FromDecimalOptional))]
|
[JsonConverter(typeof(FromDecimalOptional))]
|
||||||
public string Cost { get; set; }
|
public string Cost { get; set; }
|
||||||
public string Tags { get; set; }
|
public string Tags { get; set; }
|
||||||
public List<ExtraField> ExtraFields { get; set; }
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
}
|
}
|
||||||
public class OdometerRecordExportModel
|
public class OdometerRecordExportModel
|
||||||
{
|
{
|
||||||
@@ -72,7 +73,8 @@ namespace CarCareTracker.Models
|
|||||||
public string Odometer { get; set; }
|
public string Odometer { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public string Tags { get; set; }
|
public string Tags { get; set; }
|
||||||
public List<ExtraField> ExtraFields { get; set; }
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
}
|
}
|
||||||
public class TaxRecordExportModel
|
public class TaxRecordExportModel
|
||||||
{
|
{
|
||||||
@@ -85,7 +87,8 @@ namespace CarCareTracker.Models
|
|||||||
[JsonConverter(typeof(FromDecimalOptional))]
|
[JsonConverter(typeof(FromDecimalOptional))]
|
||||||
public string Cost { get; set; }
|
public string Cost { get; set; }
|
||||||
public string Tags { get; set; }
|
public string Tags { get; set; }
|
||||||
public List<ExtraField> ExtraFields { get; set; }
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
}
|
}
|
||||||
public class GasRecordExportModel
|
public class GasRecordExportModel
|
||||||
{
|
{
|
||||||
@@ -107,7 +110,8 @@ namespace CarCareTracker.Models
|
|||||||
public string MissedFuelUp { get; set; }
|
public string MissedFuelUp { get; set; }
|
||||||
public string Notes { get; set; }
|
public string Notes { get; set; }
|
||||||
public string Tags { get; set; }
|
public string Tags { get; set; }
|
||||||
public List<ExtraField> ExtraFields { get; set; }
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
|
public List<UploadedFiles> Files { get; set; } = new List<UploadedFiles>();
|
||||||
}
|
}
|
||||||
public class ReminderExportModel
|
public class ReminderExportModel
|
||||||
{
|
{
|
||||||
@@ -130,6 +134,6 @@ namespace CarCareTracker.Models
|
|||||||
public string Priority { get; set; }
|
public string Priority { get; set; }
|
||||||
public string Progress { get; set; }
|
public string Progress { get; set; }
|
||||||
public string Cost { get; set; }
|
public string Cost { get; set; }
|
||||||
public List<ExtraField> ExtraFields { get; set; }
|
public List<ExtraField> ExtraFields { get; set; } = new List<ExtraField>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -118,6 +118,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -140,6 +141,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -192,6 +194,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -215,6 +218,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -267,6 +271,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -290,6 +295,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -342,6 +348,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -365,6 +372,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -430,6 +438,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -452,6 +461,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -510,6 +520,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -535,6 +546,7 @@
|
|||||||
notes - notes(optional)<br />
|
notes - notes(optional)<br />
|
||||||
tags - tags separated by space(optional)<br />
|
tags - tags separated by space(optional)<br />
|
||||||
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
extrafields - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showExtraFieldsInfo()">extrafields(optional)</a><br />
|
||||||
|
files - <a class="link-body-emphasis link-offset-2 link-underline-opacity-25 link-underline-opacity-100-hover reminder-calendar-item" onclick="showAttachmentsInfo()">attachments(optional)</a><br />
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -566,6 +578,22 @@
|
|||||||
vehicleId - Id of Vehicle
|
vehicleId - Id of Vehicle
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="row api-method">
|
||||||
|
<div class="col-1">
|
||||||
|
<span class="badge bg-primary">POST</span>
|
||||||
|
</div>
|
||||||
|
<div class="col-5 copyable">
|
||||||
|
<code>/api/documents/upload</code>
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Upload Documents
|
||||||
|
</div>
|
||||||
|
<div class="col-3">
|
||||||
|
Body(form-data): {<br />
|
||||||
|
documents[] - Files to Upload<br />
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@if (User.IsInRole(nameof(UserData.IsRootUser)))
|
@if (User.IsInRole(nameof(UserData.IsRootUser)))
|
||||||
{
|
{
|
||||||
<div class="row api-method">
|
<div class="row api-method">
|
||||||
@@ -624,4 +652,11 @@
|
|||||||
icon: "info"
|
icon: "info"
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
function showAttachmentsInfo(){
|
||||||
|
Swal.fire({
|
||||||
|
title: "Attaching Files",
|
||||||
|
html: "The Document Upload Endpoint will upload the files and provide a formatted output which you can pass into this method",
|
||||||
|
icon: "info"
|
||||||
|
});
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
Reference in New Issue
Block a user