コード例 #1
0
        public JsonResult CargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio)
        {
            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.";

            try {
                DateTime fechaContable;
                if (lineaNegocio == 1)
                {
                    fechaContable = DateTime.Parse(db.cargaDocumentoRoaming.Where(x => x.estatusCarga == "PC" && x.ordenCarga == "A" && x.idDocumento == "TAPOUT").Select(x => x.periodoCarga).SingleOrDefault());
                }
                else
                {
                    fechaContable = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
                }
                /// Se salta la primera linea, el encabezado
                List <string> csvData = new List <string>();
                using (System.IO.StreamReader reader = new System.IO.StreamReader(archivoCSV.InputStream, Encoding.Default)) {
                    while (!reader.EndOfStream)
                    {
                        csvData.Add(reader.ReadLine());
                    }
                }
                lineas = csvData.Skip(1);

                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (string linea in lineas)
                    {
                        var lineaSplit = linea.Split(';');
                        if (lineaSplit.Count() == 11)

                        {
                            try
                            {
                                AjustesObjecion aObj = new AjustesObjecion();

                                aObj.sentido        = lineaSplit[0];
                                aObj.sociedad       = lineaSplit[1];
                                aObj.trafico        = lineaSplit[2];
                                aObj.servicio       = lineaSplit[3];
                                aObj.deudorAcreedor = lineaSplit[4];
                                aObj.operador       = lineaSplit[5];
                                aObj.grupo          = lineaSplit[6];

                                aObj.periodo       = DateTime.ParseExact(lineaSplit[7], "dd/MM/yyyy", new CultureInfo("es-ES"));
                                aObj.importe       = decimal.Parse(lineaSplit[8]);
                                aObj.moneda        = lineaSplit[9];
                                aObj.lineaNegocio  = lineaNegocio;
                                aObj.periodo_carga = fechaContable;
                                aObj.origen        = "CARGA";
                                aObj.minutos       = decimal.Parse(lineaSplit[10]);

                                var result = db.spValidaAjustesObj(aObj.sentido, aObj.sociedad, aObj.trafico,
                                                                   aObj.servicio, aObj.deudorAcreedor, aObj.operador, aObj.grupo, lineaNegocio).ToList();

                                aObj.idSociedad       = result[0].idSociedad;
                                aObj.idTrafico        = result[0].idTrafico;
                                aObj.idServicio       = result[0].idServicio;
                                aObj.idDeudorAcreedor = result[0].idDeudorAcreedor;
                                aObj.idOperador       = result[0].idOperador;
                                aObj.idGrupo          = result[0].idGrupo;

                                if (result[0].idStatus == 1)
                                {
                                    aObj.activo = 1;
                                    totalProcesados++;
                                }
                                else
                                {
                                    aObj.activo = 0;
                                    listaErrores.Add("Línea " + lineaActual + ": Error en la carga, no se encontraron coincidencias en los catálogo(s).");
                                }

                                db.AjustesObjecion.Add(aObj);
                                Log log = new Log();
                                log.insertaNuevoOEliminado(aObj, "Nuevo", "ajustesObjecion.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;
                    }
                    // Termina exitosamente la transaccion
                    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));
        }