using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using AutoMapper; using CsvHelper; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Logging; using OD.WebApplication.Models; namespace OD.WebApplication.Controllers { public class HomeController : Controller { private readonly ILogger _logger; private readonly IMapper _mapper; public HomeController(ILogger logger, IMapper mapper) { _logger = logger; _mapper = mapper; } public IActionResult Index() { return View(); } [HttpPost] [ValidateAntiForgeryToken] public IActionResult UploadCSV(HomeViewModel model) { try { if (ModelState.IsValid) { using var reader = new StreamReader(model.FileAttach.OpenReadStream()); using var csvReader = new CsvReader(reader, CultureInfo.GetCultureInfo("es-ES")); csvReader.Configuration.BadDataFound = null; csvReader.Configuration.HeaderValidated = null; csvReader.Configuration.MissingFieldFound = null; csvReader.Configuration.Delimiter = ";"; var originDto = new List(); csvReader.Read(); csvReader.ReadHeader(); while (csvReader.Read()) { var record = new OriginDataModel { Id = csvReader.GetField("ID"), Categories = csvReader.GetField("Categorías"), Manufacturer = csvReader.GetField("Fabricante"), PriceListingWithoutVAT = decimal.Parse(csvReader.GetField("Precio tiendas sin IVA")), PricePublicWithoutVAT = decimal.Parse(csvReader.GetField("PVP sin IVA")), PriceRecommendedWithoutVAT = decimal.Parse(csvReader.GetField("PVR sin IVA")), Stock = decimal.Parse(csvReader.GetField("Stock")), Volume = float.Parse(csvReader.GetField("Volumen")), Name = csvReader.GetField("Nombre"), LongDesc = csvReader.GetField("Descripción larga"), ShortDesc = csvReader.GetField("Descripción breve"), ImageUrls = csvReader.GetField("Imagen"), Ean13 = csvReader.GetField("EAN13"), Sda = csvReader.GetField("SDA") }; originDto.Add(record); } var destinationDto = _mapper.Map, List>(originDto); var ms = new MemoryStream(); var sw = new StreamWriter(ms); using var csvWriter = new CsvWriter(sw, CultureInfo.GetCultureInfo("es-ES")); csvWriter.Configuration.Delimiter = ","; csvWriter.WriteRecords(destinationDto); sw.Flush(); ms.Position = 0; return File(ms.ToArray(), "text/csv", "result.csv"); } } catch (Exception ex) { _logger.LogError(ex, "Attempted to perform an invalid conversion"); return new ErrorMessageResult(new ErrorResult { Exception = ex }); } return RedirectToAction("Index"); } [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] public IActionResult Error() { return View(new ErrorViewModel {RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier}); } } }