public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio) { FuncionesGeneralesController FNCGrales = new FuncionesGeneralesController(); List <string> listaErrores = new List <string>(); IEnumerable <string> lineas = null; object respuesta = null; int totalProcesados = 0; int lineaActual = 2; bool status = false; string exception = "Error, se presento un error inesperado"; //DateTime fecha = new DateTime(); try { List <string> csvData = new List <string>(); using (StreamReader reader = new StreamReader(archivoCSV.InputStream, Encoding.Default)) { while (!reader.EndOfStream) { csvData.Add(reader.ReadLine()); } } var periodoCarga = db.cargaDocumentoRoaming.Where(x => x.estatusCarga == "PC" && x.ordenCarga == "A" && x.idDocumento == "TAPIN").Select(x => x.periodoCarga).SingleOrDefault(); lineas = csvData.Skip(1); totalProcesados = lineas.Count(); using (TransactionScope scope = new TransactionScope()) { foreach (string linea in lineas) { var lineaSplit = linea.Split(';'); if (lineaSplit.Count() == 12) { try { CostoFR CFR = new CostoFR(); CFR.TipoOperador = lineaSplit[0]; CFR.Operador = lineaSplit[1]; CFR.Acreedor = lineaSplit[2]; CFR.NombreProveedor = lineaSplit[3]; CFR.Moneda = lineaSplit[4]; CFR.Importe = Convert.ToDecimal(lineaSplit[5]); //DateTime FechaInicio = FNCGrales.ConvierteFecha(lineaSplit[6], '/', "DMY"); CFR.Fecha_Inicio = DateTime.ParseExact(lineaSplit[6], "dd/MM/yyyy", new CultureInfo("en-US"), DateTimeStyles.None); DateTime FechaFin = FNCGrales.ConvierteFecha(lineaSplit[7], '/', "DMY"); CFR.Fecha_Fin = FechaFin; CFR.CuentaContable = lineaSplit[8]; CFR.Sociedad = lineaSplit[9]; CFR.TC = decimal.Parse(string.IsNullOrEmpty(lineaSplit[10]) ? "0" : lineaSplit[10]); CFR.Id_LineaNegocio = lineaNegocio; CFR.periodo_carga = DateTime.Parse(periodoCarga); var resultado = db.spValidaIdCostoFR(CFR.Operador, CFR.Acreedor, CFR.Moneda, lineaNegocio).ToList(); CFR.Id_Operador = resultado[0].idOperador; CFR.id_Acreedor = resultado[0].idAcreedor; CFR.Id_Moneda = resultado[0].idMoneda; if (resultado[0].estatus == 1) { CFR.Activo = 1; } else { CFR.Activo = 0; } db.CostoFR.Add(CFR); Log log = new Log(); log.insertaNuevoOEliminado(CFR, "Nuevo", "CostoFR.html", Request.UserHostAddress); } catch (FormatException) { listaErrores.Add("línea " + lineaActual + ": Campo con formato erróneo"); } } else { listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente."); } ++lineaActual; } db.SaveChanges(); scope.Complete(); exception = "Datos cargados con éxito"; status = true; } } catch (FileNotFoundException) { exception = "El archivo Selecionado aún no existe en el Repositorio."; status = false; } catch (UnauthorizedAccessException) { exception = "No tiene permiso para acceder al archivo actual."; status = false; } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32) { exception = "Falta el nombre del archivo, o el archivo o directorio está en uso."; status = false; } catch (TransactionAbortedException) { exception = "Transacción abortada. Se presentó un error."; status = false; } finally { respuesta = new { success = true, results = listaErrores, mensaje = exception, totalProcesados, status }; } return(Json(respuesta, JsonRequestBehavior.AllowGet)); }