public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio)
        {
            List <string>        listaErrores = new List <string>();
            var                  hoy = DateTime.Now;
            IEnumerable <string> lineas = null;
            object               respuesta = null;
            int                  totalProcesados = 0;
            int                  lineaActual = 1;
            int                  contador = 0;
            bool                 status = false;
            string               ope, fact;
            string               exception = "Error, se presento un error inesperado.";

            try
            {
                List <string> csvData = new List <string>();
                using (System.IO.StreamReader reader = new System.IO.StreamReader(archivoCSV.InputStream, System.Text.Encoding.UTF8))
                {
                    while (!reader.EndOfStream)
                    {
                        csvData.Add(reader.ReadLine());
                    }
                }
                lineas = csvData.Skip(1);

                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (string ln in lineas)
                    {
                        string linea      = ln.Replace('%', ' ');
                        var    lineaSplit = linea.Split('|');
                        ++lineaActual;
                        if (lineaSplit.Count() == 20)
                        {
                            RoamingCancelacionCosto entidad = new RoamingCancelacionCosto();

                            try
                            {
                                contador++;
                                ope  = lineaSplit[2];
                                fact = lineaSplit[11];

                                entidad.BanderaConcepto            = lineaSplit[0];
                                entidad.NumeroProvision            = lineaSplit[1];
                                entidad.CuentaContable             = lineaSplit[2];
                                entidad.Indat                      = lineaSplit[3];
                                entidad.Concepto                   = lineaSplit[4];
                                entidad.Grupo                      = lineaSplit[5];
                                entidad.Acreedor                   = lineaSplit[6];
                                entidad.MontoProvision             = lineaSplit[7];
                                entidad.Moneda                     = lineaSplit[8];
                                entidad.Periodo                    = lineaSplit[9];
                                entidad.Tipo                       = lineaSplit[10];
                                entidad.NumeroDocumentoSap         = lineaSplit[11];
                                entidad.FolioDocumento             = lineaSplit[12];
                                entidad.TipoCambioProvision        = lineaSplit[13];
                                entidad.ImporteMxn                 = lineaSplit[14];
                                entidad.ImporteFactura             = lineaSplit[15];
                                entidad.DiferenciaProvisionFactura = lineaSplit[16];
                                entidad.TipoCambioFactura          = lineaSplit[17];
                                entidad.ExcesoProvisionMxn         = lineaSplit[18];
                                entidad.InsuficienciaProvisionMxn  = lineaSplit[19];
                                entidad.Activo                     = "1";
                                entidad.LineaNegocio               = "1";
                                entidad.FechaCarga                 = DateTime.Now;

                                totalProcesados++;

                                db.RoamingCancelacionCosto.Add(entidad);
                            }
                            catch (FormatException e)
                            {
                                if (e.Message == "String was not recognized as a valid DateTime.")
                                {
                                    listaErrores.Add("Línea " + lineaActual + ": Campo de Fecha con formato erróneo.");
                                }
                                else
                                {
                                    listaErrores.Add("Línea " + lineaActual + ": Campo con formato erróneo.");
                                }
                            }
                            catch (Exception)
                            {
                                listaErrores.Add("Línea " + lineaActual + ": Error desconocido. ");
                            }
                        }
                        else
                        {
                            listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente.");
                        }
                    }
                    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;
            }
            catch (Exception err)
            {
                exception = "Error desconocido. " + err.InnerException.ToString();
                status    = false;
            }
            finally
            {
                respuesta = new
                {
                    success         = true,
                    results         = listaErrores,
                    mensaje         = exception,
                    totalProcesados = totalProcesados,
                    status          = status
                };
            }
            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }
Beispiel #2
0
        public JsonResult cargarCSV(HttpPostedFileBase archivoCSV, int lineaNegocio)
        {
            List <string>        listaErrores = new List <string>();
            var                  hoy = DateTime.Now;
            IEnumerable <string> lineas = null;
            object               respuesta = null;
            int                  totalProcesados = 0;
            int                  lineaActual = 1;
            int                  contador = 0;
            bool                 status = false;
            string               ope, fact;
            string               exception = "Error, se presento un error inesperado.";

            try
            {
                List <string> csvData = new List <string>();
                using (System.IO.StreamReader reader = new System.IO.StreamReader(archivoCSV.InputStream, System.Text.Encoding.GetEncoding("ISO-8859-1")))
                {
                    while (!reader.EndOfStream)
                    {
                        csvData.Add(reader.ReadLine());
                    }
                }
                lineas = csvData.Skip(1);

                var datos = (from periodos in db.cargaDocumentoRoaming
                             where periodos.idDocumento == "TAPIN" & periodos.ordenCarga == "A" & periodos.estatusCarga == "PC"
                             group periodos by periodos.periodoCarga into g
                             orderby g.Key ascending
                             select new
                             { Id = g.Key, Periodo = g.Key }).FirstOrDefault();



                var _IdOperador = db.Operador
                                  .Select(p => p.Id_Operador)
                                  .ToArray();

                var _Acreedor = db.Acreedor
                                .Select(p => p.Acreedor1)
                                .ToArray();


                string Activo = "";
                String Valor  = "";

                using (TransactionScope scope = new TransactionScope())
                {
                    foreach (string ln in lineas)
                    {
                        string linea      = ln.Replace('%', ' ');
                        var    lineaSplit = linea.Split('|');
                        ++lineaActual;
                        if (lineaSplit.Count() == 14)
                        {
                            RoamingCancelacionCosto entidad = new RoamingCancelacionCosto();

                            try
                            {
                                contador++;
                                ope  = lineaSplit[2];
                                fact = lineaSplit[11];

                                Activo = ((!_IdOperador.Any(o => o == lineaSplit[3].ToUpper())) ? "0" : "1");

                                if (Activo == "1")
                                {
                                    Activo = ((!_Acreedor.Any(o => o == lineaSplit[6].ToUpper())) ? "0" : "1");
                                }

                                decimal importeMXNtest = 0;
                                decimal difProvFact    = 0;

                                entidad.BanderaConcepto     = lineaSplit[0];
                                entidad.NumeroProvision     = lineaSplit[1];
                                entidad.FechaContable       = datos.Periodo.ToString();
                                entidad.CuentaContable      = lineaSplit[2];
                                entidad.Indat               = lineaSplit[3];
                                entidad.Concepto            = lineaSplit[4];
                                entidad.Grupo               = lineaSplit[5];
                                entidad.Acreedor            = lineaSplit[6];
                                entidad.MontoProvision      = lineaSplit[7];
                                entidad.Moneda              = lineaSplit[8];
                                entidad.Periodo             = lineaSplit[9];
                                entidad.Tipo                = lineaSplit[10];
                                entidad.NumeroDocumentoSap  = lineaSplit[11];
                                entidad.FolioDocumento      = lineaSplit[12];
                                entidad.TipoCambioProvision = lineaSplit[13];
                                //entidad.ImporteMxn = lineaSplit[14];
                                //entidad.ImporteFactura = lineaSplit[15];
                                //entidad.DiferenciaProvisionFactura = lineaSplit[16];
                                //entidad.TipoCambioFactura = lineaSplit[17];
                                //entidad.ExcesoProvisionMxn = lineaSplit[18];
                                //Valor = lineaSplit[19];
                                //entidad.InsuficienciaProvisionMxn = Valor.Replace(",,", "");



                                importeMXNtest     = Convert.ToDecimal(entidad.MontoProvision) * Convert.ToDecimal(entidad.TipoCambioProvision);
                                entidad.ImporteMxn = Convert.ToString(importeMXNtest);

                                var monto = from montodock in db.RoamingDocumentoCosto
                                            where montodock.IdOperador == entidad.Indat & montodock.FolioDocumento == entidad.FolioDocumento
                                            & montodock.FechaConsumo == entidad.Periodo

                                            group montodock by new { montodock.FechaContable }

                                into mygroup
                                select mygroup.FirstOrDefault();

                                foreach (var elemento in monto)
                                {
                                    entidad.ImporteFactura = elemento.Monto;
                                }

                                difProvFact = Convert.ToDecimal(entidad.MontoProvision) + Convert.ToDecimal(entidad.ImporteFactura);
                                entidad.DiferenciaProvisionFactura = Convert.ToString(difProvFact);

                                var tipocambiotest = from tipoCamb in db.RoamingDocumentoCosto
                                                     where tipoCamb.FechaConsumo == entidad.Periodo & tipoCamb.IdOperador == entidad.Indat
                                                     & tipoCamb.FolioDocumento == entidad.FolioDocumento

                                                     group tipoCamb by new { tipoCamb.FechaContable }

                                into mygroup
                                select mygroup.FirstOrDefault();

                                foreach (var elemento in tipocambiotest)
                                {
                                    entidad.TipoCambioFactura = elemento.TipoCambio;
                                }

                                if (float.Parse(entidad.DiferenciaProvisionFactura) < 0)
                                {
                                    decimal excprov = 0;

                                    excprov = Convert.ToDecimal(entidad.DiferenciaProvisionFactura) * Convert.ToDecimal(entidad.TipoCambioProvision);

                                    entidad.ExcesoProvisionMxn = Convert.ToString(excprov);
                                }
                                else
                                {
                                    entidad.ExcesoProvisionMxn = "0";
                                }


                                if (Convert.ToDecimal(entidad.DiferenciaProvisionFactura) > 0)
                                {
                                    decimal insufiProvi = 0;
                                    insufiProvi = Convert.ToDecimal(entidad.DiferenciaProvisionFactura) * Convert.ToDecimal(entidad.TipoCambioFactura);
                                    entidad.InsuficienciaProvisionMxn = Convert.ToString(insufiProvi);
                                }
                                else
                                {
                                    entidad.InsuficienciaProvisionMxn = "0";
                                }

                                //entidad.InsuficienciaProvisionMxn = lineaSplit[18];


                                entidad.Activo       = Activo;
                                entidad.LineaNegocio = "1";
                                entidad.FechaCarga   = DateTime.Now;

                                var flujo = from consuImpo in db.RoamingDocumentoCosto
                                            where consuImpo.IdOperador == entidad.Indat & consuImpo.FolioDocumento == entidad.FolioDocumento
                                            group consuImpo by new { consuImpo.FechaContable }

                                into mygroup
                                select mygroup.FirstOrDefault();

                                foreach (var elemento in flujo)
                                {
                                    if (entidad.BanderaConcepto == "TARIFA")
                                    {
                                        entidad.FechaConsumoTarifa   = elemento.FechaConsumo;
                                        entidad.ImporteFacturaTarifa = elemento.MontoFacturado;
                                    }
                                }

                                totalProcesados++;

                                db.RoamingCancelacionCosto.Add(entidad);
                            }
                            catch (FormatException e)
                            {
                                if (e.Message == "String was not recognized as a valid DateTime.")
                                {
                                    listaErrores.Add("Línea " + lineaActual + ": Campo de Fecha con formato erróneo.");
                                }
                                else
                                {
                                    listaErrores.Add("Línea " + lineaActual + ": Campo con formato erróneo.");
                                }
                            }
                            catch (Exception)
                            {
                                listaErrores.Add("Línea " + lineaActual + ": Error desconocido. ");
                            }
                        }
                        else
                        {
                            listaErrores.Add("Línea " + lineaActual + ": Número de campos insuficiente.");
                        }
                    }
                    db.SaveChanges();
                    scope.Complete();
                    exception = "Datos cargados con éxito";
                    status    = true;
                }

                // LLenar fluctuacion
                if (status)
                {
                    db.Database.CommandTimeout = 3000;
                    db.sp_FluctuacionROM_Insert(DateTime.Parse(datos.Periodo), "COSTO", "FluctuacionCostoROM");

                    using (var anteriores = new Negocio.PeriodosAnteriores())
                        anteriores.CrearPeriodosAnteriores(db);
                }
            }
            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;
            }
            catch (Exception err)
            {
                exception = "Error desconocido. " + err.InnerException.ToString();
                status    = false;
            }
            finally
            {
                respuesta = new
                {
                    success         = true,
                    results         = listaErrores,
                    mensaje         = exception,
                    totalProcesados = totalProcesados,
                    status          = status
                };
            }
            return(Json(respuesta, JsonRequestBehavior.AllowGet));
        }