public void Dispose()
 {
     if (transation != null)
     {
         transation.Rollback();
     }
     if (_db != null)
     {
         _db.Dispose();
     }
 }
Beispiel #2
0
        public object CargaDatosMVNO(string Periodo)
        {
            string ruta = "", nombreArchivo = "", exception = "Error al cargar el archivo.";
            char   separador;
            bool   exitoso     = false;
            int    Id          = 0;
            int    i           = 0;
            int?   numeroCarga = db.DatosTraficoMVNO.Max(x => x.NumeroCarga);

            if (numeroCarga == null)
            {
                numeroCarga = 1;
            }
            string   periodo = DateTime.ParseExact(Periodo.ToUpper(), "yyyy MMMM", new CultureInfo("es-ES")).ToString("yyyy/MM");
            string   f       = DateTime.ParseExact(periodo, "yyyy/MM", new CultureInfo("es-ES")).ToString("dd/MM/yyyy");
            DateTime fecha   = Convert.ToDateTime(periodo);

            object respuesta = null;

            using (TransactionScope transaction = new TransactionScope()) {
                try {
                    var traficoMVNO = from archivo in db.CargaDocumento
                                      join parametro in db.parametrosCargaDocumento
                                      on archivo.Id_Documento equals parametro.idDocumento
                                      where archivo.Periodo == periodo &&
                                      archivo.EstatusCarga == "PC" &&
                                      archivo.Id_LineaNegocio == 3
                                      select new
                    {
                        parametro.pathURL,
                        parametro.nombreArchivo,
                        archivo.Periodo,
                        archivo.Id,
                        archivo.EstatusCarga,
                        parametro.caracterSeparador
                    };
                    nombreArchivo = traficoMVNO.SingleOrDefault().nombreArchivo.Replace("YYYYMM", traficoMVNO.SingleOrDefault().Periodo.Replace("/", ""));
                    ruta          = traficoMVNO.SingleOrDefault().pathURL + nombreArchivo;
                    Id            = traficoMVNO.SingleOrDefault().Id;
                    separador     = Convert.ToChar(traficoMVNO.SingleOrDefault().caracterSeparador);
                    string[] lineas = System.IO.File.ReadAllLines(ruta);
                    if (lineas.Count() > 0)
                    {
                        for (i = 0; i < lineas.Count(); i++)
                        {
                            if (lineas[i].Contains("Collection") || lineas[i] == "")
                            {
                                continue;
                            }

                            var linea      = lineas[i].Split(separador);
                            var datosMVNOS = new DatosTraficoMVNO
                            {
                                //ID carga
                                Id_Carga = Id,
                                //Collection
                                Collection = ValidaCampo(linea[0], "Collection"),
                                //HOperator
                                HOperator = ValidaCampo(linea[1], "HOperator"),
                                //Operator
                                Operator = ValidaCampo(linea[2], "Operator"),
                                //ReferenceCode
                                ReferenceCode = ValidaCampo(linea[3], "ReferenceCode"),
                                //TransDate
                                TransDate = Convert.ToDateTime(ValidaCampo(linea[4], "TransDate")),
                                //Eventos
                                Eventos = decimal.Parse(ValidaCampo(linea[5], "Eventos")),
                                //IdCollectionServicioRegion
                                IdColleccionServicioRegion = ValidaCampo(linea[6], "IdCollectionServicioRegion"),
                                //Service
                                Service = ValidaCampo(linea[7], "Service"),
                                //Real
                                Real = decimal.Parse(ValidaCampo(linea[8], "Real")),
                                //Duration
                                Duration = decimal.Parse(ValidaCampo(linea[9], "Duration")),
                                //Monto
                                Monto = decimal.Parse(linea[10]),
                                //PrecioUnitario
                                PrecioUnitario = decimal.Parse(linea[11]),
                                //Moneda
                                Moneda = ValidaCampo(linea[12], "Moneda"),
                                //Module
                                Module = ValidaCampo(linea[13], "Module"),
                                //Numero carga
                                NumeroCarga = numeroCarga
                            };
                            db.DatosTraficoMVNO.Add(datosMVNOS);
                            Log log2 = new Log();
                            log2.insertaNuevoOEliminado(datosMVNOS, "Nuevo", "DatosTraficoMVNO.html", Request.UserHostAddress);
                            db.SaveChanges();
                        }
                        CargaDocumento cargaDocumento = db.CargaDocumento.Where(x => x.Id == Id).SingleOrDefault();
                        cargaDocumento.EstatusCarga = "CC";
                        cargaDocumento.FechaCarga   = DateTime.Now;

                        InsertCargaDocumento(cargaDocumento, fecha);

                        //Log log3 = new Log();
                        //log3.insertaBitacoraModificacion(cargaDocumento, "Id", cargaDocumento.Id, "CargaDocumento.html", Request.UserHostAddress);

                        db.SaveChanges();
                    }
                    transaction.Complete();
                    exitoso = true;
                } catch (FileNotFoundException) {
                    exception = "El archivo no se encuentra en el directorio especificado.";
                } catch (UnauthorizedAccessException) {
                    exception = "No tiene permiso para acceder al archivo actual.";
                } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32)
                {
                    exception = "Falta el nombre del archivo, o el archivo o directorio está en uso.";
                } catch (TransactionAbortedException) {
                    exception = "Transacción abortada. Se presentó un error." + " Línea: " + i;
                } catch (FormatException) {
                    exception = "Error en la conversión de datos." + " Línea: " + i;
                } finally {
                    if (exitoso)
                    {
                        db.SaveChanges();
                        respuesta = new { success = true, results = "ok" };
                    }
                    else
                    {
                        respuesta = new { success = false, results = exception };
                    }
                }
            }
            db.Dispose();

            return(respuesta);
        }
Beispiel #3
0
        public object CargaDatosLDI(string Periodo)
        {
            string ruta = "", nombreArchivo = "", exception = "Error al cargar el archivo";
            object respuesta = null;
            char   separador;
            bool   exitoso = false;
            int    Id = 0, numeroDeLinea = 0, contador = 0;

            string[] lineas = null;
            string   operadores = "", monedas = "", trafico = "";

            string[] arreglo      = null;
            string   periodo      = DateTime.ParseExact(Periodo.ToUpper(), "yyyy MMMM", new CultureInfo("es-ES")).ToString("yyyy/MM");
            DateTime fechaPeriodo = Convert.ToDateTime(periodo);
            int      lineaLDI     = 2;

            List <Claves>          listaIDS             = new List <Claves>();
            List <Errores>         listaErrores         = new List <Errores>();
            List <DatosTraficoLDI> listaTrafico         = new List <DatosTraficoLDI>();
            List <DatosTraficoLDI> listaTraficoCompleta = new List <DatosTraficoLDI>();

            int?numeroCarga = db.DatosTraficoLDI.Max(x => x.NumeroCarga);

            if (numeroCarga == null)
            {
                numeroCarga = 1;
            }
            else
            {
                numeroCarga = numeroCarga + 1;
            }
            List <object> lista = new List <object>();

            using (TransactionScope transaction = new TransactionScope()) {
                try {
                    var traficoLDI = from archivo in db.CargaDocumento
                                     join parametro in db.parametrosCargaDocumento
                                     on archivo.Id_Documento equals parametro.idDocumento
                                     where archivo.Periodo == periodo &&
                                     archivo.EstatusCarga == "PC" &&
                                     archivo.Id_LineaNegocio == lineaLDI
                                     select new
                    {
                        parametro.pathURL,
                        parametro.nombreArchivo,
                        archivo.Periodo,
                        archivo.Id,
                        archivo.EstatusCarga,
                        parametro.caracterSeparador
                    };

                    nombreArchivo = traficoLDI.SingleOrDefault().nombreArchivo.Replace("YYYYMM", traficoLDI.SingleOrDefault().Periodo.Replace("/", ""));
                    ruta          = traficoLDI.SingleOrDefault().pathURL + nombreArchivo;
                    Id            = traficoLDI.SingleOrDefault().Id;
                    separador     = Convert.ToChar(traficoLDI.SingleOrDefault().caracterSeparador);

                    lineas = System.IO.File.ReadAllLines(ruta, Encoding.Default).Where(x => !string.IsNullOrWhiteSpace(x)).ToArray();

                    string[] arrOperador = new string[lineas.Count()];
                    string[] arrMoneda   = new string[lineas.Count()];
                    string[] arrTrafico  = new string[lineas.Count()];

                    foreach (string linea in lineas)
                    {
                        if (numeroDeLinea > 0)
                        {
                            arreglo = linea.Split(',');
                            if (ValidaLinea(arreglo))
                            {
                                operadores = operadores + arreglo[4] + ",";
                                monedas    = monedas + arreglo[10] + ",";
                                trafico    = trafico + arreglo[13] + ",";

                                arrOperador[contador] = arreglo[4];
                                arrMoneda[contador]   = arreglo[10];
                                arrTrafico[contador]  = arreglo[13];


                                listaTrafico.Add(new DatosTraficoLDI
                                {
                                    Id_Carga         = Id,
                                    Franchise        = arreglo[0],
                                    Direccion        = arreglo[1],
                                    Billed_Product   = arreglo[2],
                                    Rating_Component = arreglo[3],
                                    Unit_Cost_User   = decimal.Parse(arreglo[5]),
                                    Month            = DateTime.ParseExact(arreglo[6], "dd/MM/yyyy", new CultureInfo("es-ES")),
                                    Calls            = decimal.Parse(arreglo[7]),
                                    Actual_Usage     = decimal.Parse(arreglo[8]),
                                    Charge_Usage     = decimal.Parse(arreglo[9]),
                                    Amount           = decimal.Parse(arreglo[11]),
                                    Iva            = decimal.Parse(arreglo[12]),
                                    Sobrecargo     = decimal.Parse(arreglo[14]),
                                    NumeroCarga    = numeroCarga,
                                    fecha_contable = fechaPeriodo.Date
                                });
                                //Código temporal
                                contador++;
                            }
                            else
                            {
                                listaErrores.Add(new Errores
                                {
                                    numeroLinea = numeroDeLinea,
                                    motivo      = "Número de campos insuficiente."
                                });
                            }
                        }
                        numeroDeLinea++;
                    }
                    //Obtener ID's correspondientes
                    listaIDS = BuscaId(listaTrafico, trafico, operadores, monedas, lineaLDI);
                    //Asigna los Id a los elementos de la lista
                    listaTrafico         = ValidaAsignaDatos(listaTrafico, listaIDS, arrOperador, arrMoneda, arrTrafico, listaErrores);
                    listaTraficoCompleta = listaTrafico;
                    if (listaTraficoCompleta.Count() > 0)
                    {
                        DbContext context = db;
                        IC2.DbContextSqlServerExtensions.BulkInsert(context, listaTraficoCompleta, true, "DatosTraficoLDI");
                        //Log log3 = new Log();
                        //log3.registraCarga("DatosTraficoLDI.html", Request.UserHostAddress, nombreArchivo);
                    }
                    //Conceptos
                    db.sp_traficoConceptos_Update(fechaPeriodo);
                    //Data Trafico
                    InsertDataTrafico(fechaPeriodo);
                    //Actualiza Carga Documentos
                    CargaDocumento cargaDocumento = db.CargaDocumento.Where(x => x.Id == Id).SingleOrDefault();
                    cargaDocumento.EstatusCarga = "CC";
                    cargaDocumento.FechaCarga   = DateTime.Now;
                    InsertCargaDocumento(cargaDocumento, fechaPeriodo);
                    //Log log4 = new Log();
                    //log4.insertaBitacoraModificacion(cargaDocumento, "Id", cargaDocumento.Id, "CargaDocumento.html", Request.UserHostAddress);
                    transaction.Complete();
                    exitoso = true;
                } catch (FileNotFoundException) {
                    exception = "El archivo no se encuentra en el directorio especificado.";
                } catch (UnauthorizedAccessException) {
                    exception = "No tiene permiso para acceder al archivo actual.";
                } catch (IOException e) when((e.HResult & 0x0000FFFF) == 32)
                {
                    exception = "Falta el nombre del archivo, o el archivo o directorio está en uso.";
                } catch (TransactionAbortedException) {
                    exception = "Transacción abortada. Se presentó un error." + " Línea: " + contador;
                } catch (FormatException) {
                    exception = "Error en la conversión de datos." + " Línea: " + contador;
                } finally {
                    if (exitoso)
                    {
                        respuesta = new { success = true, results = "ok" };
                    }
                    else
                    {
                        respuesta = new { success = false, results = exception };
                    }
                }
            }
            db.SaveChanges();
            db.Dispose();
            return(respuesta);
        }