This commit is contained in:
		
							
								
								
									
										106
									
								
								OD.WebApplication/Context/ApplicationContextHelper.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										106
									
								
								OD.WebApplication/Context/ApplicationContextHelper.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,106 @@ | |||||||
|  | namespace OD.WebApplication.Context | ||||||
|  | { | ||||||
|  |     public static class ApplicationContextHelper | ||||||
|  |     { | ||||||
|  |         public static string[] BusinessApplicationCategories = | ||||||
|  |         { | ||||||
|  |             "Metrónomos, afinadores, atriles, accesorios y complementos en general", | ||||||
|  |             "Contrabajo y arcos", | ||||||
|  |             "Cuerdas de violín, viola, violonchelo y contrabajo", | ||||||
|  |             "Pastillas, afinadores, puentes, cordales, soportes y accesorios de cuerda", | ||||||
|  |             "Viola y arcos de viola", | ||||||
|  |             "Violín y arcos de violín", | ||||||
|  |             "Violonchelo y arcos", | ||||||
|  |             "Amplificadores, cabezales y bafles de guitarra y bajo", | ||||||
|  |             "Bajos eléctricos y acústicos", | ||||||
|  |             "Bandurrias", | ||||||
|  |             "Cuerdas de instrumentos de cuerda punteada", | ||||||
|  |             "Estuches, fundas y soportes para instrumentos de cuerda punteada", | ||||||
|  |             "Guitarras acústicas amplificadas", | ||||||
|  |             "Guitarras acústicas no amplificadas", | ||||||
|  |             "Guitarras eléctricas", | ||||||
|  |             "Guitarras españolas amplificadas", | ||||||
|  |             "Guitarras españolas no amplificadas", | ||||||
|  |             "Laúdes", | ||||||
|  |             "Procesadores de guitarra, pedales, pedaleras, pastillas, mocrófonos de guitara y afinadores", | ||||||
|  |             "Púas, puentes, cejuelas, tornillos, cordales, clavijas y accesorios en general de guitarra e instrumentos de cuerda p", | ||||||
|  |             "Timples, ukeleles y otros instrumentos de cuerda punteada", | ||||||
|  |             "Lámaras, focos, procesadores y mesas iluminación", | ||||||
|  |             "Líquido y máquinas de humo", | ||||||
|  |             "Software secuenciador, editor, procesador y grabador de sonido y sus complementos, aso como programas en general", | ||||||
|  |             "Torres, bolas y complementos de iluminación", | ||||||
|  |             "Armónicas, acordeones e instrumentos de lengüeta y sus complementos", | ||||||
|  |             "Baterías acústicas y digitales", | ||||||
|  |             "Cajones rumberos, claves, sonajas y otros instrumentos no incluidos en otra familia", | ||||||
|  |             "Marimbas, xilófonos, metalófonos e instrumentos con escala afinada", | ||||||
|  |             "Platos", | ||||||
|  |             "Soportes, racks, fundas, banquetas, parches, membranas, baquetas y accesorios de percusión en general", | ||||||
|  |             "Timbales, bombos, tambores, cajas panderetas y otros instrumentos de membrana", | ||||||
|  |             "Estuches, fundas, banquetas y accesorios de piano", | ||||||
|  |             "Pianos de Cola Nuevos con o sin módulo", | ||||||
|  |             "Pianos de Cola Usados", | ||||||
|  |             "Pianos Digitales con ritmos", | ||||||
|  |             "Pianos Digitales sin ritmos", | ||||||
|  |             "Pianos Verticales Nuevos con o sin módulo", | ||||||
|  |             "Pianos Verticales Usados con o sin módulo", | ||||||
|  |             "Libretas, block y papel pautado", | ||||||
|  |             "Libros y partituras de canto", | ||||||
|  |             "Libros y partituras de clarinete", | ||||||
|  |             "Libros y partituras de contrabajo", | ||||||
|  |             "Libros y partituras de fagot", | ||||||
|  |             "Libros y partituras de flauta, dulzaina y gaita", | ||||||
|  |             "Libros y partituras de guitarra y cuerda punteada", | ||||||
|  |             "Libros y partituras de música de cámara", | ||||||
|  |             "Libros y partituras de oboe", | ||||||
|  |             "Libros y partituras de orquesta", | ||||||
|  |             "Libros y partituras de percusión", | ||||||
|  |             "Libros y partituras de piano", | ||||||
|  |             "Libros y partituras de saxo", | ||||||
|  |             "Libros y partituras de solfeo, armonía, Historia de la Música y textos en general", | ||||||
|  |             "Libros y partituras de teclado y acordeón", | ||||||
|  |             "Libros y partituras de trombón, tuba y bombardino", | ||||||
|  |             "Libros y partituras de trompa", | ||||||
|  |             "Libros y partituras de trompeta", | ||||||
|  |             "Libros y partituras de viola", | ||||||
|  |             "Libros y partituras de violín", | ||||||
|  |             "Libros y partituras de violonchelo", | ||||||
|  |             "Alquiler de piano, teclados y otros aparatos", | ||||||
|  |             "Servicios de afinación, reparación y transporte de pianos", | ||||||
|  |             "Servicios de reparación de bafles, etapas y sistemas de amplificación y procesado de sonido", | ||||||
|  |             "Servicios de reparación de teclados e instrumentos digitales", | ||||||
|  |             "Servicios de reparación y ajuste de guitarras", | ||||||
|  |             "Servicios de reparación y ajuste de instrumentos de cuerda", | ||||||
|  |             "Servicios de reparación y ajuste de instrumentos de viento", | ||||||
|  |             "Bafles, altavoces y monitores normales o inalámbricos", | ||||||
|  |             "Cables y conectores", | ||||||
|  |             "Etapas de potencia", | ||||||
|  |             "Grabadores de sonido y sus soportes", | ||||||
|  |             "Mesas de mezcla, cabezales, equipos integrados, amplificadores (combos) multiuso y mezcladores", | ||||||
|  |             "Micrófonos normales e inalámbricos", | ||||||
|  |             "Procesadores de efectos, pachbay, puertas de ruido, divisores, ecualizadores y otros sistemas de procesado de sonido", | ||||||
|  |             "Soportes de micro, columna y torres, racks, auriculares y accesorios en general de amplificación", | ||||||
|  |             "Accesorios de informática en general", | ||||||
|  |             "CD y DVD", | ||||||
|  |             "Librerías de sonidos y midifiles", | ||||||
|  |             "OTRO", | ||||||
|  |             "Tarjetas de sonido e interfaces de ordenador con o sin software", | ||||||
|  |             "Alimentadores, fundas, estuches, pedales, soportes y accesorios de teclado y módulos", | ||||||
|  |             "Cajas de ritmos y módulos de DJ", | ||||||
|  |             "Módulos arregladores con ritmos y secuenciadores", | ||||||
|  |             "Módulos de sonido, sintetizadores y samplers", | ||||||
|  |             "Módulos digitales de percusión", | ||||||
|  |             "Órganos y teclados litúrgicos", | ||||||
|  |             "Teclados con ritmos", | ||||||
|  |             "Teclados Sintetizadores, Workstation y samplers", | ||||||
|  |             "Teclados y mesas controladores", | ||||||
|  |             "Cañas, boquillas, abrazaderas, estuches, fundas, soportes, atriles, accesorios y complementos de viento", | ||||||
|  |             "Clarinete", | ||||||
|  |             "Flauta travesera y de pico", | ||||||
|  |             "Oboe, fliscorno, bombardino, fagot, helicón, tuba y otros instrumentos de viento", | ||||||
|  |             "Saxo", | ||||||
|  |             "Trombón", | ||||||
|  |             "Trompa", | ||||||
|  |             "Trompetas y cornetas" | ||||||
|  |         }; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -1,8 +1,10 @@ | |||||||
| using System; | using System; | ||||||
| using System.Collections.Generic; | using System.Collections.Generic; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
| using System.Linq; | using System.Globalization; | ||||||
| using System.Threading.Tasks; | using System.IO; | ||||||
|  | using AutoMapper; | ||||||
|  | using CsvHelper; | ||||||
| using Microsoft.AspNetCore.Mvc; | using Microsoft.AspNetCore.Mvc; | ||||||
| using Microsoft.Extensions.Logging; | using Microsoft.Extensions.Logging; | ||||||
| using OD.WebApplication.Models; | using OD.WebApplication.Models; | ||||||
| @@ -12,30 +14,78 @@ namespace OD.WebApplication.Controllers | |||||||
|     public class HomeController : Controller |     public class HomeController : Controller | ||||||
|     { |     { | ||||||
|         private readonly ILogger<HomeController> _logger; |         private readonly ILogger<HomeController> _logger; | ||||||
|  |         private readonly IMapper _mapper; | ||||||
|  |  | ||||||
|         public HomeController(ILogger<HomeController> logger) |         public HomeController(ILogger<HomeController> logger, IMapper mapper) | ||||||
|         { |         { | ||||||
|             _logger = logger; |             _logger = logger; | ||||||
|  |             _mapper = mapper; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         public IActionResult Index() |         public IActionResult Index() | ||||||
|         { |         { | ||||||
|             return View(); |             return View(); | ||||||
|         } |         } | ||||||
|          |  | ||||||
|         public IActionResult Upload() |  | ||||||
|         { |  | ||||||
|             return View(); |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         public async Task<IActionResult> UploadCSV() |  | ||||||
|         { |  | ||||||
|             return Ok(); |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|         public IActionResult Privacy() |         [HttpPost] | ||||||
|  |         [ValidateAntiForgeryToken] | ||||||
|  |         public IActionResult UploadCSV(HomeViewModel model) | ||||||
|         { |         { | ||||||
|             return View(); |             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 Ok(); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] |         [ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)] | ||||||
|   | |||||||
							
								
								
									
										28
									
								
								OD.WebApplication/Models/DestinationDataModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								OD.WebApplication/Models/DestinationDataModel.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | |||||||
|  | using CsvHelper.Configuration.Attributes; | ||||||
|  |  | ||||||
|  | namespace OD.WebApplication.Models | ||||||
|  | { | ||||||
|  |     public class DestinationDataModel | ||||||
|  |     { | ||||||
|  |         [Name("categ_id")] | ||||||
|  |         public string Category { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("brand")] | ||||||
|  |         public string Brand { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("name")] | ||||||
|  |         public string Name { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("alternate_code")] | ||||||
|  |         public string AlternateCode { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("list_price")] | ||||||
|  |         public int StorePriceWithVAT { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("online_price")] | ||||||
|  |         public int OnlinePriceWithVAT { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("online_value_price")] | ||||||
|  |         public int OnlineValueWihtVAT { get; set; } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										27
									
								
								OD.WebApplication/Models/ErrorMessageResult.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								OD.WebApplication/Models/ErrorMessageResult.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,27 @@ | |||||||
|  | using System.Threading.Tasks; | ||||||
|  | using Microsoft.AspNetCore.DataProtection.Internal; | ||||||
|  | using Microsoft.AspNetCore.Http; | ||||||
|  | using Microsoft.AspNetCore.Mvc; | ||||||
|  |  | ||||||
|  | namespace OD.WebApplication.Models | ||||||
|  | { | ||||||
|  |     public class ErrorMessageResult : IActionResult | ||||||
|  |     { | ||||||
|  |         private readonly ErrorResult _result; | ||||||
|  |  | ||||||
|  |         public ErrorMessageResult(ErrorResult result) | ||||||
|  |         { | ||||||
|  |             _result = result; | ||||||
|  |         } | ||||||
|  |          | ||||||
|  |         public async Task ExecuteResultAsync(ActionContext context) | ||||||
|  |         { | ||||||
|  |             var objectResult = new ObjectResult(_result.Exception) | ||||||
|  |             { | ||||||
|  |                 StatusCode = StatusCodes.Status500InternalServerError | ||||||
|  |             }; | ||||||
|  |  | ||||||
|  |             await objectResult.ExecuteResultAsync(context); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										9
									
								
								OD.WebApplication/Models/ErrorResult.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								OD.WebApplication/Models/ErrorResult.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,9 @@ | |||||||
|  | using System; | ||||||
|  |  | ||||||
|  | namespace OD.WebApplication.Models | ||||||
|  | { | ||||||
|  |     public class ErrorResult | ||||||
|  |     { | ||||||
|  |         public Exception Exception { get; set; } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										11
									
								
								OD.WebApplication/Models/HomeViewModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								OD.WebApplication/Models/HomeViewModel.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,11 @@ | |||||||
|  | using System.IO; | ||||||
|  | using Microsoft.AspNetCore.Http; | ||||||
|  | using Microsoft.Extensions.FileProviders; | ||||||
|  |  | ||||||
|  | namespace OD.WebApplication.Models | ||||||
|  | { | ||||||
|  |     public class HomeViewModel | ||||||
|  |     { | ||||||
|  |         public IFormFile FileAttach { get; set; } | ||||||
|  |     } | ||||||
|  | } | ||||||
							
								
								
									
										49
									
								
								OD.WebApplication/Models/OriginDataModel.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								OD.WebApplication/Models/OriginDataModel.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | |||||||
|  | using CsvHelper.Configuration.Attributes; | ||||||
|  |  | ||||||
|  | namespace OD.WebApplication.Models | ||||||
|  | { | ||||||
|  |     public class OriginDataModel | ||||||
|  |     { | ||||||
|  |         [Name("ID")] | ||||||
|  |         public string Id { get; set; } | ||||||
|  |  | ||||||
|  |         [Name("Categorías")] | ||||||
|  |         public string Categories { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Fabricante")] | ||||||
|  |         public string Manufacturer { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Precio tiendas sin IVA")] | ||||||
|  |         public decimal PriceListingWithoutVAT { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("PVP sin IVA")] | ||||||
|  |         public decimal PricePublicWithoutVAT { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("PVR sin IVA")] | ||||||
|  |         public decimal PriceRecommendedWithoutVAT { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Stock")] | ||||||
|  |         public decimal Stock { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Volumen")] | ||||||
|  |         public float Volume { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Nombre")] | ||||||
|  |         public string Name { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Descripción larga")] | ||||||
|  |         public string LongDesc { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Descripción breve")] | ||||||
|  |         public string ShortDesc { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("Imagen")] | ||||||
|  |         public string ImageUrls { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("EAN13")] | ||||||
|  |         public string Ean13 { get; set; } | ||||||
|  |          | ||||||
|  |         [Name("SDA")] | ||||||
|  |         public string Sda { get; set; } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @@ -5,10 +5,9 @@ | |||||||
|     </PropertyGroup> |     </PropertyGroup> | ||||||
|  |  | ||||||
|     <ItemGroup> |     <ItemGroup> | ||||||
|       <Content Update="Views\Home\Upload.cshtml"> |       <PackageReference Include="AutoMapper" Version="10.0.0" /> | ||||||
|         <ExcludeFromSingleFile>true</ExcludeFromSingleFile> |       <PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.0.0" /> | ||||||
|         <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> |       <PackageReference Include="CsvHelper" Version="15.0.5" /> | ||||||
|       </Content> |  | ||||||
|     </ItemGroup> |     </ItemGroup> | ||||||
|  |  | ||||||
| </Project> | </Project> | ||||||
|   | |||||||
							
								
								
									
										53
									
								
								OD.WebApplication/Profiles/OriginToDestinationProfile.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								OD.WebApplication/Profiles/OriginToDestinationProfile.cs
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | |||||||
|  | using System.Linq; | ||||||
|  | using AutoMapper; | ||||||
|  | using AutoMapper.Internal; | ||||||
|  | using Microsoft.AspNetCore.Builder; | ||||||
|  | using OD.WebApplication.Context; | ||||||
|  | using OD.WebApplication.Models; | ||||||
|  |  | ||||||
|  | namespace OD.WebApplication.Profiles | ||||||
|  | { | ||||||
|  |     public class OriginToDestinationProfile : Profile | ||||||
|  |     { | ||||||
|  |         public OriginToDestinationProfile() | ||||||
|  |         { | ||||||
|  |             CreateMap<OriginDataModel, DestinationDataModel>()   | ||||||
|  |                 .ForMember(dest => dest.Category, opt => opt.MapFrom(src=> ResolveCategory(src))) | ||||||
|  |                 .ForMember(dest => dest.Brand, opt => opt.MapFrom(src => src.Manufacturer)) | ||||||
|  |                 .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name)) | ||||||
|  |                 .ForMember(dest => dest.AlternateCode, opt => opt.MapFrom(src => ResolveAlternateCode(src))) | ||||||
|  |                 .ForMember(dest => dest.StorePriceWithVAT, opt => opt.MapFrom(src => ResolveAddVAT(src.PriceListingWithoutVAT))) | ||||||
|  |                 .ForMember(dest => dest.OnlinePriceWithVAT, opt => opt.MapFrom(src => ResolveAddVAT(src.PricePublicWithoutVAT))) | ||||||
|  |                 .ForMember(dest => dest.OnlineValueWihtVAT, opt => opt.MapFrom(src => ResolveAddVAT(src.PriceRecommendedWithoutVAT))); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static string ResolveCategory(OriginDataModel src) | ||||||
|  |         { | ||||||
|  |             var categories = src.Categories.Split(',').ToList(); | ||||||
|  |             categories = categories.Select(del => del.Trim()).ToList(); | ||||||
|  |             foreach (var category in categories) | ||||||
|  |             { | ||||||
|  |                 if (ApplicationContextHelper.BusinessApplicationCategories.Any(x => | ||||||
|  |                     x.Contains(category) || category.Contains(x))) | ||||||
|  |                 { | ||||||
|  |                     return ApplicationContextHelper.BusinessApplicationCategories.First(x => | ||||||
|  |                         x.Contains(category) || category.Contains(x)); | ||||||
|  |                 } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             return "OTRO"; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static string ResolveAlternateCode(OriginDataModel src) | ||||||
|  |         { | ||||||
|  |             return src.ShortDesc.ToUpper().Replace(" ", ""); | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         private static int ResolveAddVAT(decimal input) | ||||||
|  |         { | ||||||
|  |             const decimal vat = 0.21m; | ||||||
|  |             var result = decimal.Round(input * vat + input); | ||||||
|  |             return decimal.ToInt32(result); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | }  | ||||||
| @@ -8,6 +8,9 @@ using Microsoft.AspNetCore.HttpsPolicy; | |||||||
| using Microsoft.Extensions.Configuration; | using Microsoft.Extensions.Configuration; | ||||||
| using Microsoft.Extensions.DependencyInjection; | using Microsoft.Extensions.DependencyInjection; | ||||||
| using Microsoft.Extensions.Hosting; | using Microsoft.Extensions.Hosting; | ||||||
|  | using AutoMapper; | ||||||
|  | using OD.WebApplication.Context; | ||||||
|  | using OD.WebApplication.Profiles; | ||||||
|  |  | ||||||
| namespace OD.WebApplication | namespace OD.WebApplication | ||||||
| { | { | ||||||
| @@ -24,6 +27,7 @@ namespace OD.WebApplication | |||||||
|         public void ConfigureServices(IServiceCollection services) |         public void ConfigureServices(IServiceCollection services) | ||||||
|         { |         { | ||||||
|             services.AddControllersWithViews(); |             services.AddControllersWithViews(); | ||||||
|  |             services.AddAutoMapper(typeof(Startup)); | ||||||
|         } |         } | ||||||
|  |  | ||||||
|         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. |         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. | ||||||
|   | |||||||
| @@ -1,8 +1,21 @@ | |||||||
| @{ | @using Microsoft.AspNetCore.Mvc.Rendering | ||||||
|     ViewData["Title"] = "Home Page"; | @model HomeViewModel | ||||||
|  | @{ | ||||||
|  |     ViewData["Title"] = "Upload page"; | ||||||
| } | } | ||||||
|  |  | ||||||
| <div class="text-center"> | <div class="text-center"> | ||||||
|     <h1 class="display-4">Welcome</h1> |     <h4>Escoge el CSV a parsear</h4> | ||||||
|     <p>Learn about <a href="https://docs.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p> |     <br/> | ||||||
|  |     @using (Html.BeginForm("UploadCSV", "Home", FormMethod.Post, new {id = "loginForm", enctype = "multipart/form-data"})) | ||||||
|  |     { | ||||||
|  |         @Html.AntiForgeryToken() | ||||||
|  |         <div class="form-group"> | ||||||
|  |             <label asp-for="@Model.FileAttach"></label> | ||||||
|  |             <input asp-for="@Model.FileAttach" type="file"> | ||||||
|  |             <span asp-validation-for="@Model.FileAttach"></span> | ||||||
|  |         </div> | ||||||
|  |         <input class="btn btn-outline-primary" type="submit"/> | ||||||
|  |     } | ||||||
|  |  | ||||||
| </div> | </div> | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| @{ |  | ||||||
|     ViewData["Title"] = "Privacy Policy"; |  | ||||||
| } |  | ||||||
| <h1>@ViewData["Title"]</h1> |  | ||||||
|  |  | ||||||
| <p>Use this page to detail your site's privacy policy.</p> |  | ||||||
| @@ -1,18 +0,0 @@ | |||||||
| @using Microsoft.AspNetCore.Mvc.Rendering |  | ||||||
| @{ |  | ||||||
|     ViewData["Title"] = "Upload page"; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| <div class="text-center"> |  | ||||||
|     <h4>Escoge el CSV a parsear</h4> |  | ||||||
|     <br/> |  | ||||||
|     @using (Html.BeginForm("UploadCSV", "Home", FormMethod.Post, new {id = "loginForm"})) |  | ||||||
|     { |  | ||||||
|         @Html.AntiForgeryToken() |  | ||||||
|         <div class="form-group"> |  | ||||||
|             Do your magic pablo |  | ||||||
|         </div> |  | ||||||
|         <input class="btn btn-outline-primary" type="submit"/>   |  | ||||||
|     } |  | ||||||
|  |  | ||||||
| </div> |  | ||||||
| @@ -21,12 +21,6 @@ | |||||||
|                     <li class="nav-item"> |                     <li class="nav-item"> | ||||||
|                         <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> |                         <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Index">Home</a> | ||||||
|                     </li> |                     </li> | ||||||
|                     <li class="nav-item"> |  | ||||||
|                         <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Upload">Upload</a> |  | ||||||
|                     </li> |  | ||||||
|                     <li class="nav-item"> |  | ||||||
|                         <a class="nav-link text-dark" asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> |  | ||||||
|                     </li> |  | ||||||
|                 </ul> |                 </ul> | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
| @@ -40,7 +34,7 @@ | |||||||
|  |  | ||||||
| <footer class="border-top footer text-muted"> | <footer class="border-top footer text-muted"> | ||||||
|     <div class="container"> |     <div class="container"> | ||||||
|         © 2020 - OD.WebApplication - <a asp-area="" asp-controller="Home" asp-action="Privacy">Privacy</a> |         © 2020 - SI | ||||||
|     </div> |     </div> | ||||||
| </footer> | </footer> | ||||||
| <script src="~/lib/jquery/dist/jquery.min.js"></script> | <script src="~/lib/jquery/dist/jquery.min.js"></script> | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 linuxct
					linuxct