diff --git a/Controllers/Vehicle/ImportController.cs b/Controllers/Vehicle/ImportController.cs index 03fbb2a..a39b84c 100644 --- a/Controllers/Vehicle/ImportController.cs +++ b/Controllers/Vehicle/ImportController.cs @@ -16,6 +16,176 @@ namespace CarCareTracker.Controllers { return PartialView("_BulkDataImporter", mode); } + [HttpGet] + public IActionResult GenerateCsvSample(ImportMode mode) + { + string uploadDirectory = "temp/"; + string uploadPath = Path.Combine(_webEnv.ContentRootPath, "data", uploadDirectory); + if (!Directory.Exists(uploadPath)) + Directory.CreateDirectory(uploadPath); + var fileNameToExport = $"temp/{Guid.NewGuid()}.csv"; + var fullExportFilePath = _fileHelper.GetFullFilePath(fileNameToExport, false); + switch (mode) + { + case ImportMode.ServiceRecord: + case ImportMode.RepairRecord: + case ImportMode.UpgradeRecord: + { + var exportData = new List { new GenericRecordExportModel + { + Date = DateTime.Now.ToShortDateString(), + Description = "Test", + Cost = 123.45M.ToString("C"), + Notes = "Test Note", + Odometer = 12345.ToString(), + Tags = "test1 test2" + } }; + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + //custom writer + StaticHelper.WriteGenericRecordExportModel(csv, exportData); + } + writer.Dispose(); + } + } + break; + case ImportMode.GasRecord: + { + var exportData = new List { new GasRecordExportModel + { + Date = DateTime.Now.ToShortDateString(), + Odometer = 12345.ToString(), + FuelConsumed = 12.34M.ToString(), + Cost = 45.67M.ToString("C"), + IsFillToFull = true.ToString(), + MissedFuelUp = false.ToString(), + Notes = "Test Note", + Tags = "test1 test2" + } }; + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + //custom writer + StaticHelper.WriteGasRecordExportModel(csv, exportData); + } + writer.Dispose(); + } + } + break; + case ImportMode.OdometerRecord: + { + var exportData = new List { new OdometerRecordExportModel + { + Date = DateTime.Now.ToShortDateString(), + InitialOdometer = 12345.ToString(), + Odometer = 12345.ToString(), + Notes = "Test Note", + Tags = "test1 test2" + } }; + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + //custom writer + StaticHelper.WriteOdometerRecordExportModel(csv, exportData); + } + writer.Dispose(); + } + } + break; + case ImportMode.TaxRecord: + { + var exportData = new List { new TaxRecordExportModel + { + Date = DateTime.Now.ToShortDateString(), + Description = "Test", + Cost = 123.45M.ToString("C"), + Notes = "Test Note", + Tags = "test1 test2" + } }; + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + //custom writer + StaticHelper.WriteTaxRecordExportModel(csv, exportData); + } + writer.Dispose(); + } + } + break; + case ImportMode.SupplyRecord: + { + var exportData = new List { new SupplyRecordExportModel + { + Date = DateTime.Now.ToShortDateString(), + PartNumber = "TEST-123456", + PartSupplier = "Test Supplier", + PartQuantity = 1.5M.ToString(), + Description = "Test", + Cost = 123.45M.ToString("C"), + Notes = "Test Note", + Tags = "test1 test2" + } }; + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + //custom writer + StaticHelper.WriteSupplyRecordExportModel(csv, exportData); + } + writer.Dispose(); + } + } + break; + case ImportMode.PlanRecord: + { + var exportData = new List { new PlanRecordExportModel + { + DateCreated = DateTime.Now.ToString(), + DateModified = DateTime.Now.ToString(), + Description = "Test", + Type = ImportMode.RepairRecord.ToString(), + Priority = PlanPriority.Normal.ToString(), + Progress = PlanProgress.Testing.ToString(), + Cost = 123.45M.ToString("C"), + Notes = "Test Note" + } }; + using (var writer = new StreamWriter(fullExportFilePath)) + { + using (var csv = new CsvWriter(writer, CultureInfo.InvariantCulture)) + { + //custom writer + StaticHelper.WritePlanRecordExportModel(csv, exportData); + } + writer.Dispose(); + } + } + break; + default: + return Json(OperationResponse.Failed("No parameters")); + } + try + { + var fileBytes = _fileHelper.GetFileBytes(fullExportFilePath, true); + if (fileBytes.Length > 0) + { + return File(fileBytes, "text/csv", $"{mode.ToString().ToLower()}sample.csv"); + } + else + { + return Json(OperationResponse.Failed("An error has occurred while generating CSV sample: file has zero bytes")); + } + } + catch (Exception ex) + { + _logger.LogError(ex.Message); + return Json(OperationResponse.Failed($"An error has occurred while generating CSV sample: {ex.Message}")); + } + } [TypeFilter(typeof(CollaboratorFilter))] [HttpGet] public IActionResult ExportFromVehicleToCsv(int vehicleId, ImportMode mode) diff --git a/Helper/FileHelper.cs b/Helper/FileHelper.cs index ed3bc2e..63eb737 100644 --- a/Helper/FileHelper.cs +++ b/Helper/FileHelper.cs @@ -6,6 +6,7 @@ namespace CarCareTracker.Helper public interface IFileHelper { string GetFullFilePath(string currentFilePath, bool mustExist = true); + byte[] GetFileBytes(string fullFilePath, bool deleteFile = false); string MoveFileFromTemp(string currentFilePath, string newFolder); bool RenameFile(string currentFilePath, string newName); bool DeleteFile(string currentFilePath); @@ -85,6 +86,19 @@ namespace CarCareTracker.Helper return string.Empty; } } + public byte[] GetFileBytes(string fullFilePath, bool deleteFile = false) + { + if (File.Exists(fullFilePath)) + { + var fileBytes = File.ReadAllBytes(fullFilePath); + if (deleteFile) + { + File.Delete(fullFilePath); + } + return fileBytes; + } + return Array.Empty(); + } public bool RestoreBackup(string fileName, bool clearExisting = false) { var fullFilePath = GetFullFilePath(fileName); diff --git a/Views/Vehicle/_BulkDataImporter.cshtml b/Views/Vehicle/_BulkDataImporter.cshtml index 13e3e2c..f889413 100644 --- a/Views/Vehicle/_BulkDataImporter.cshtml +++ b/Views/Vehicle/_BulkDataImporter.cshtml @@ -21,30 +21,7 @@ - @if (Model == ImportMode.GasRecord) - { - @translator.Translate(userLanguage, "Download Sample") - } - else if (Model == ImportMode.ServiceRecord || Model == ImportMode.RepairRecord || Model == ImportMode.UpgradeRecord) - { - @translator.Translate(userLanguage, "Download Sample") - } - else if (Model == ImportMode.TaxRecord) - { - @translator.Translate(userLanguage, "Download Sample") - } - else if (Model == ImportMode.SupplyRecord) - { - @translator.Translate(userLanguage, "Download Sample") - } - else if (Model == ImportMode.PlanRecord) - { - @translator.Translate(userLanguage, "Download Sample") - } - else if (Model == ImportMode.OdometerRecord) - { - @translator.Translate(userLanguage, "Download Sample") - } + @translator.Translate(userLanguage, "Download Sample")
diff --git a/wwwroot/defaults/gassample.csv b/wwwroot/defaults/gassample.csv deleted file mode 100644 index 323f792..0000000 --- a/wwwroot/defaults/gassample.csv +++ /dev/null @@ -1,3 +0,0 @@ -Date,Odometer,FuelConsumed,Cost,IsFillToFull,MissedFuelUp,Notes -5/8/2020,204836,8.331,16.24,True,False, -5/30/2020,205056,11.913,25.72,True,False, \ No newline at end of file diff --git a/wwwroot/defaults/odometersample.csv b/wwwroot/defaults/odometersample.csv deleted file mode 100644 index 14f0b80..0000000 --- a/wwwroot/defaults/odometersample.csv +++ /dev/null @@ -1,2 +0,0 @@ -Date,Odometer,Notes -1/1/2024,260001,test test diff --git a/wwwroot/defaults/plansample.csv b/wwwroot/defaults/plansample.csv deleted file mode 100644 index cb9db53..0000000 --- a/wwwroot/defaults/plansample.csv +++ /dev/null @@ -1,2 +0,0 @@ -DateCreated,DateModified,Description,Notes,Type,Priority,Progress,Cost -1/19/2024 6:01:02 PM,1/19/2024 7:32:58 PM,Repair Exhaust,,RepairRecord,Normal,Testing,$50.00 diff --git a/wwwroot/defaults/servicerecordsample.csv b/wwwroot/defaults/servicerecordsample.csv deleted file mode 100644 index 4e1194e..0000000 --- a/wwwroot/defaults/servicerecordsample.csv +++ /dev/null @@ -1,3 +0,0 @@ -Date,Odometer,Description,Notes,Cost -01/01/2020,45000,Test Description 1,Test Note 1,20.60 -01/02/2020,47000,Test Description 2,Test Note 2,40.45 \ No newline at end of file diff --git a/wwwroot/defaults/supplysample.csv b/wwwroot/defaults/supplysample.csv deleted file mode 100644 index f454a36..0000000 --- a/wwwroot/defaults/supplysample.csv +++ /dev/null @@ -1,2 +0,0 @@ -Date,PartNumber,PartSupplier,PartQuantity,Description,Cost,Notes -1/16/2024,‎EVA17872045551,Evan Fischer,1,Front Bumper,$95.14,Altima Activities diff --git a/wwwroot/defaults/taxrecordsample.csv b/wwwroot/defaults/taxrecordsample.csv deleted file mode 100644 index f6e9a0c..0000000 --- a/wwwroot/defaults/taxrecordsample.csv +++ /dev/null @@ -1,3 +0,0 @@ -Date,Description,Notes,Cost -01/01/2020,Test Description 1,Test Note 1,20.60 -01/02/2020,Test Description 2,Test Note 2,40.45 \ No newline at end of file