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));
        }