diff --git a/Controllers/VehicleController.cs b/Controllers/VehicleController.cs index 7be9f77..79592b2 100644 --- a/Controllers/VehicleController.cs +++ b/Controllers/VehicleController.cs @@ -258,6 +258,32 @@ namespace CarCareTracker.Controllers return Json($"/{fileNameToExport}"); } } + else if (mode == ImportMode.PlanRecord) + { + var fileNameToExport = $"temp/{Guid.NewGuid()}.csv"; + var fullExportFilePath = _fileHelper.GetFullFilePath(fileNameToExport, false); + var vehicleRecords = _planRecordDataAccess.GetPlanRecordsByVehicleId(vehicleId); + if (vehicleRecords.Any()) + { + var exportData = vehicleRecords.Select(x => new PlanRecordExportModel { + DateCreated = x.DateCreated.ToString("G"), + DateModified = x.DateModified.ToString("G"), + Description = x.Description, + Cost = x.Cost.ToString("C"), + Type = x.ImportMode.ToString(), + Priority = x.Priority.ToString(), + Progress = x.Progress.ToString(), + Notes = x.Notes }); + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + csv.WriteRecords(exportData); + } + } + return Json($"/{fileNameToExport}"); + } + } else if (mode == ImportMode.GasRecord) { var fileNameToExport = $"temp/{Guid.NewGuid()}.csv"; @@ -376,6 +402,25 @@ namespace CarCareTracker.Controllers }; _serviceRecordDataAccess.SaveServiceRecordToVehicle(convertedRecord); } + else if (mode == ImportMode.PlanRecord) + { + var progressIsEnum = Enum.TryParse(importModel.Progress, out PlanProgress parsedProgress); + var typeIsEnum = Enum.TryParse(importModel.Type, out ImportMode parsedType); + var priorityIsEnum = Enum.TryParse(importModel.Priority, out PlanPriority parsedPriority); + var convertedRecord = new PlanRecord() + { + VehicleId = vehicleId, + DateCreated = DateTime.Parse(importModel.DateCreated), + DateModified = DateTime.Parse(importModel.DateModified), + Progress = parsedProgress, + ImportMode = parsedType, + Priority = parsedPriority, + Description = string.IsNullOrWhiteSpace(importModel.Description) ? $"Plan Record on {importModel.DateCreated}" : importModel.Description, + Notes = string.IsNullOrWhiteSpace(importModel.Notes) ? "" : importModel.Notes, + Cost = decimal.Parse(importModel.Cost, NumberStyles.Any) + }; + _planRecordDataAccess.SavePlanRecordToVehicle(convertedRecord); + } else if (mode == ImportMode.RepairRecord) { var convertedRecord = new CollisionRecord() diff --git a/Enum/ImportMode.cs b/Enum/ImportMode.cs index 845f54f..f7fc5ed 100644 --- a/Enum/ImportMode.cs +++ b/Enum/ImportMode.cs @@ -11,6 +11,7 @@ NoteRecord = 6, SupplyRecord = 7, Dashboard = 8, - PlanRecord = 9 + PlanRecord = 9, + OdometerRecord = 10 } } diff --git a/Helper/FileHelper.cs b/Helper/FileHelper.cs index 823e579..ac9dfa8 100644 --- a/Helper/FileHelper.cs +++ b/Helper/FileHelper.cs @@ -68,7 +68,7 @@ namespace CarCareTracker.Helper var filesToUpload = Directory.GetFiles(imagePath); foreach(string file in filesToUpload) { - File.Copy(file, $"{existingPath}/{Path.GetFileName(file)}"); + File.Copy(file, $"{existingPath}/{Path.GetFileName(file)}", true); } } if (Directory.Exists(documentPath)) @@ -82,7 +82,7 @@ namespace CarCareTracker.Helper var filesToUpload = Directory.GetFiles(documentPath); foreach (string file in filesToUpload) { - File.Copy(file, $"{existingPath}/{Path.GetFileName(file)}"); + File.Copy(file, $"{existingPath}/{Path.GetFileName(file)}", true); } } if (File.Exists(dataPath)) diff --git a/MapProfile/ImportMappers.cs b/MapProfile/ImportMappers.cs index 258cdcd..93017ec 100644 --- a/MapProfile/ImportMappers.cs +++ b/MapProfile/ImportMappers.cs @@ -8,6 +8,8 @@ namespace CarCareTracker.MapProfile public ImportMapper() { Map(m => m.Date).Name(["date", "fuelup_date"]); + Map(m => m.DateCreated).Name(["datecreated"]); + Map(m => m.DateModified).Name(["datemodified"]); Map(m => m.Odometer).Name(["odometer"]); Map(m => m.FuelConsumed).Name(["gallons", "liters", "litres", "consumption", "quantity", "fuelconsumed"]); Map(m => m.Cost).Name(["cost", "total cost", "totalcost", "total price"]); @@ -20,6 +22,9 @@ namespace CarCareTracker.MapProfile Map(m => m.PartSupplier).Name(["partsupplier"]); Map(m => m.PartQuantity).Name(["partquantity"]); Map(m => m.PartNumber).Name(["partnumber"]); + Map(m => m.Progress).Name(["progress"]); + Map(m => m.Type).Name(["type"]); + Map(m => m.Priority).Name(["priority"]); } } } diff --git a/Models/ImportModel.cs b/Models/ImportModel.cs index 87270d8..0406846 100644 --- a/Models/ImportModel.cs +++ b/Models/ImportModel.cs @@ -6,6 +6,11 @@ public class ImportModel { public string Date { get; set; } + public string DateCreated { get; set; } + public string DateModified { get; set; } + public string Type { get; set; } + public string Priority { get; set; } + public string Progress { get; set; } public string Odometer { get; set; } public string Description { get; set; } public string Notes { get; set; } @@ -65,4 +70,16 @@ public string Metric { get; set; } public string Notes { get; set; } } + public class PlanRecordExportModel + { + public string DateCreated { get; set; } + public string DateModified { get; set; } + public string Description { get; set; } + public string Notes { get; set; } + public string Type { get; set; } + public string Priority { get; set; } + public string Progress { get; set; } + public string Cost { get; set; } + } + } diff --git a/Views/Home/_Settings.cshtml b/Views/Home/_Settings.cshtml index 522d89c..1795d29 100644 --- a/Views/Home/_Settings.cshtml +++ b/Views/Home/_Settings.cshtml @@ -50,14 +50,14 @@