Esempio n. 1
0
        public int LeeArchivo(string tipoArchivo, StringCollection tipoLinea)
        {
            //Dim texto As String
            string[] text = null;
            var resultadoValor = default(StringCollection);
            var exitoLinea = 0;
            string caracterInicial = null;
            var res1 = 0;
            var res2 = 0;

            text = LineaArchivo();

            //Consultar en tabla el estado del archivo
            //entregara 0 si no existe
            using (var context = new DISEntities())
            {
                var m = context.pa_file_ConsultaEstadoArchivo(NombreArchivo);
                Estado = m.FirstOrDefault() == null ? 0 : m.FirstOrDefault().Value;
            }
            InsertaAuditoria(Convert.ToInt32(UsuarioModificacion), "Consulta estado archivo",
                "pa_file_ConsultaEstadoArchivo '" + NombreArchivo + "'", 0);

            //valor anterior = 3
            //Si el valor es menor que 2, significa 2 cosas:
            //1.- que la nomina no esta aprobada y puede ser cargado nuevos archivos.
            //2.- que no hay checklist sobre el o los cuspp de la liquidacion
            if (Estado < 2)
            {
                //Insertar en tabla
                if (Estado == 1)
                {
                    Errors = "Archivo ya cargado previamente";
                }
                using (var context = new DISEntities())
                {
                    var m = context.pa_file_InsertaReferenciaArchivo(NombreArchivo, UsuarioModificacion);
                    IdArchivo = m.FirstOrDefault().Value;
                }
                //InsertaAuditoria(Me.UsuarioModificacion, "Inserta Referencia Archivo", "pa_file_InsertaReferenciaArchivo '" + Me.NombreArchivo + "'", Me.idArchivo)

                for (var x = 0; x <= text.Length - 1; x++)
                {
                    caracterInicial = Mid(text[x].Trim(), 0, 1);
                    var carterInicialNumer = 0;
                    if (int.TryParse(caracterInicial, out carterInicialNumer))
                    {
                        caracterInicial = "*";
                    }
                    if (tipoLinea.Contains(caracterInicial))
                    {
                        using (var context = new DISEntities())
                        {
                            var resultado = context.pa_file_ObtieneReglasArchivoPorLinea(tipoArchivo, caracterInicial);
                            ReglaLinea = ObtieneReglaLinea(resultado);
                        }
                        //InsertaAuditoria(Me.UsuarioModificacion, "Obtiene Regla de archivo por línea", "pa_file_ObtieneReglasArchivoPorLinea '" + tipoArchivo + "', " + CaracterInicial, Me.idArchivo)
                        try
                        {
                            foreach (var rLoopVariable in ReglaLinea)
                            {
                                try
                                {
                                    var r = rLoopVariable;
                                    CampoActual = Mid(text[x].Trim(), r.CaracterInicial - 1, r.LargoCampo);
                                    exitoLinea = 0;
                                    string valor = null;
                                    string[] inString = null;
                                    var j = 0;
                                    switch (r.TipoValidacion)
                                    {
                                        case "EQUAL":
                                            exitoLinea = EvaluarEqual(r, exitoLinea);
                                            break;

                                        case "BOOL_SP":
                                            exitoLinea = EvaluarBoolSp(tipoArchivo, r, x, exitoLinea);
                                            break;

                                        case "BOOL_IF_SP":
                                            exitoLinea = EvaluarBoolIfSp(r, x, exitoLinea);
                                            break;

                                        case "IN_QUERY":
                                            exitoLinea = EvaluarInQuery(r, exitoLinea);
                                            break;

                                        case "IN":
                                            exitoLinea = EvaluarIn(r, text, x, exitoLinea);
                                            break;

                                        case "FILLER":
                                            exitoLinea = EvaluarFiller(r, exitoLinea);
                                            break;

                                        case "":
                                            exitoLinea = 1;
                                            break;
                                    }
                                    using (var context = new DISEntities())
                                    {
                                        context.pa_file_InsertaHistorialCarga(IdArchivo, r.idRegla,
                                            text[x].Trim().Substring(0, 1), x + 1, r.CaracterInicial, r.LargoCampo,
                                            CampoActual, exitoLinea);
                                    }
                                }
                                catch (Exception ex)
                                {
                                    throw ex;
                                }

                            }
                        }
                        catch (Exception ex)
                        {
                            MensajeExcepcion = ex.Message;
                            return 0;
                        }
                    }
                    else
                    {
                        if (text[x].Trim().Any())
                        {
                            using (var context = new DISEntities())
                            {
                                context.pa_file_InsertaHistorialCarga(IdArchivo, 451, "#", x + 1, 1,
                                    text[x].Trim().Count(), text[x], 0);
                            }
                            //InsertaAuditoria(Me.UsuarioModificacion, "Inserta Historial de CargaLogica", "pa_file_InsertaHistorialCarga 451" + ", " + "'#'" + ", " + (x + 1).ToString() + ", " + "1" + ", " + text[x].Trim()().Count().ToString() + ", '" + Me.campoActual + "', " + "0", Me.idArchivo)
                            Errores = Errores + 1;
                        }
                    }
                }

                try
                {
                    TraspasaArchivo(tipoArchivo);

                    if (ValidacionesArchivo(tipoArchivo, 2) == false)
                    {
                        using (var context = new DISEntities())
                        {
                            Resultado = context.pa_file_ObtieneErrorArchivo(IdArchivo);
                            var result = context.pa_file_ObtieneErrorArchivo(IdArchivo);

                            var nombre = "";
                            var largo = 0;
                            foreach (var datoLoopVariable in result)
                            {
                                var dato = datoLoopVariable;
                                if (dato.NumeroLinea.Value > 0)
                                {
                                    nombre = dato.NombreArchivo;
                                    largo = dato.LargoCampo.Value;
                                }
                            }
                            if (nombre != string.Empty & largo != null)
                            {
                                //If largo = 25 Then
                                var valor1 = context.pa_valida_CodigoTransferenciaNomina(nombre, IdArchivo, largo);
                                var resultado = 0;
                                resultado = valor1.FirstOrDefault().Value;
                                if (resultado == 0)
                                {
                                    Resultado = null;
                                    Observacion =
                                        "No existe liquidación, debe cargar liquidación y despúes la nómina";
                                    //End If
                                }
                            }
                        }
                    }

                    if (Errores == 0)
                    {
                        using (var context = new DISEntities())
                        {
                            var cantidad = context.pa_file_CantidadRegistroArchivo(IdArchivo);
                            var cant = 0;
                            cant = cantidad.FirstOrDefault().Value;
                            Observacion = "cantidad de registros cargados: " + cant;
                            InsertaAuditoria(Convert.ToInt32(UsuarioModificacion),
                                "Archivo cargado correctamente, cantidad de registros cargados: " + cant,
                                NombreArchivo, IdArchivo);
                        }
                    }

                    //esto válida que los montos por cuspp no sean mayor a lo establecido
                    //en la entidad: negocio.MontoAlto
                    if (NombreArchivo.Substring(0, 3).ToLower() == "liq")
                    {
                        using (var context = new DISEntities())
                        {
                            var monto = context.pa_valida_MontoAlto(IdArchivo,
                                Convert.ToInt32(UsuarioModificacion));
                            string montoAlto = null;
                            montoAlto = monto.ToString();
                            if (montoAlto == "1")
                            {
                                dynamic monto1 = context.pa_devuelveresultado(IdArchivo);
                                var correo = "";
                                foreach (var registroLoopVariable in monto1)
                                {
                                    var registro = registroLoopVariable;
                                    correo = registro.correo;
                                    Observacion = Observacion + "\\n Monto alto cargado al CUSPP: " +
                                                  registro.Cuspp + ", por valor = " + registro.Valor.ToString;
                                    InsertaAuditoria(Convert.ToInt32(UsuarioModificacion), Observacion,
                                        NombreArchivo, IdArchivo);
                                }
                                Correo = correo;
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Observacion = ex.Message + "// TraspasaArchivo...!";
                }
            }
            else
            {
                Observacion = "ya está aprobado";
                return Estado;
            }
            return 0;
        }