97 lines
4.0 KiB
C#
97 lines
4.0 KiB
C#
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<HomeController> _logger;
|
|
private readonly IMapper _mapper;
|
|
|
|
public HomeController(ILogger<HomeController> 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<OriginDataModel>();
|
|
csvReader.Read();
|
|
csvReader.ReadHeader();
|
|
while (csvReader.Read())
|
|
{
|
|
var record = new OriginDataModel
|
|
{
|
|
Id = csvReader.GetField("ID"),
|
|
Categories = csvReader.GetField<string>("Categorías"),
|
|
Manufacturer = csvReader.GetField<string>("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<OriginDataModel>, List<DestinationDataModel>>(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});
|
|
}
|
|
}
|
|
} |