Example #1
0
        public int LeeArchivo(string tipoArchivo, StringCollection tipoLinea, int contratoId)
        {
            var text         = LineaArchivo();
            var eContratoSis = new nContratoSis().listContratoByID(new CONTRATO_SYS()
            {
                IDE_CONTRATO = contratoId
            });

            //Consultar en tabla el estado del archivo
            //entregara 0 si no existe
            //using (var context = new DISEntities())
            //{
            //    var estadoArchivo = context.pa_file_ConsultaEstadoArchivo(NombreArchivo).FirstOrDefault();
            //    if (estadoArchivo != null) Estado = estadoArchivo.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)
            //{
            //    MensageError = "Archivo ya cargado previamente";
            //}
            using (var context = new DISEntities())
            {
                var archivo = context.pa_file_InsertaReferenciaArchivo(NombreArchivo, UsuarioModificacion).FirstOrDefault();
                if (archivo != null)
                {
                    IdArchivo = archivo.Value;
                }
            }
            //InsertaAuditoria(Me.UsuarioModificacion, "Inserta Referencia Archivo", "pa_file_InsertaReferenciaArchivo '" + Me.NombreArchivo + "'", Me.idArchivo)

            for (var indexLinea = 0; indexLinea <= text.Length - 1; indexLinea++)
            {
                var caracterInicial    = Mid(text[indexLinea].Trim(), 0, 1);
                var carterInicialNumer = 0;
                if (int.TryParse(caracterInicial, out carterInicialNumer))
                {
                    caracterInicial = "*";
                }
                if (tipoLinea.Contains(caracterInicial))
                {
                    using (var context = new DISEntities())
                    {
                        if (!_reglasLineaPorTipo.ContainsKey(caracterInicial))
                        {
                            _reglasLineaPorTipo.Add(caracterInicial,
                                                    ObtieneReglaLinea(context.pa_file_ObtieneReglasArchivoPorLinea(tipoArchivo, caracterInicial, Convert.ToInt32(eContratoSis.NRO_CONTRATO))));
                        }
                    }
                    //InsertaAuditoria(Me.UsuarioModificacion, "Obtiene Regla de archivo por línea", "pa_file_ObtieneReglasArchivoPorLinea '" + tipoLinea + "', " + CaracterInicial, Me.idArchivo)
                    try
                    {
                        var propertyValues = new Dictionary <string, object>();
                        var exitoLinea     = 1;
                        //if (!caracterInicial.Equals("T"))
                        //{
                        foreach (var regla in _reglasLineaPorTipo[caracterInicial])
                        {
                            try
                            {
                                exitoLinea &= EvaluarRegla(tipoArchivo, regla, text, indexLinea, propertyValues);
                            }
                            catch (Exception ex)
                            {
                                throw ex;
                            }
                        }
                        //}
                        GrabarFilaArchivo(caracterInicial, IdArchivo, indexLinea + 1, propertyValues, contratoId, exitoLinea, tipoArchivo);
                    }
                    catch (Exception ex)
                    {
                        MensajeExcepcion = ex.Message;
                        return(0);
                    }
                }
                else
                {
                    if (text[indexLinea].Trim().Any())
                    {
                        using (var context = new DISEntities())
                        {
                            context.pa_file_InsertaHistorialCarga(IdArchivo, 451, "#", indexLinea + 1, 1, text[indexLinea].Trim().Count(), text[indexLinea], 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)
                        ContadorErrores = ContadorErrores + 1;
                    }
                }
            }

            //aca se debe realizar el bolcado de archivo sin errores
            try
            {
                //Antes de traspasar el archivo si verifica que  todas las filas se hayan cargado ccorrectamente
                if (ContadorErrores > 0 && tipoArchivo != "NOMINA")
                {
                    new dPagoCargado().setAatualizarEstadoArchivo(CodigoCabecera);
                }
                ;
                //actualizar la cabecera con el archivo id de la  nomina (NOMINA)
                if (tipoArchivo == "NOMINA")
                {
                    var archivo = new nArchivo().getArchivoByNombre(new Archivo()
                    {
                        NombreArchivo = NombreArchivo
                    });
                    //new dAprobacionCa
                    archivo.ArchivoId = IdArchivo;
                    new nAprobacionCarga().actulaizarArchivoIdNomina(archivo);
                    if (ContadorErrores > 0)
                    {
                        new nNomina().actualizarEstadoFallido(IdArchivo, contratoId);
                    }
                }

                TraspasaArchivo(tipoArchivo);
                ProcesarErrores(tipoArchivo);
                ContadorErrores = ContadorErrores > 0 ? ContadorErrores : 0;
            }
            catch (Exception ex)
            {
                Observacion = ex.Message + "// TraspasaArchivo...!";
            }
            //}
            //else
            //{
            //    Observacion = "Ya está aprobado";
            //    return Estado;
            //}
            return(0);
        }
        /// <summary>
        /// Crea un archivo excel acuerdo a los filtros especificados
        /// </summary>
        /// <param name="cab"></param>
        /// <param name="det"></param>
        /// <param name="filterParam"></param>
        /// <returns></returns>
        public string getDescargarConsulta(HistorialCargaArchivo_LinCab cab, NOMINA nomina, HistorialCargaArchivo_LinDet det, object[] filterParam)
        {
            var helperStyle = new Helpers.excelStyle();

            try
            {
                var nombreArchivo = "Archivo " + filterParam[0].ToString() + " " + DateTime.Now.ToString("yyyyMMdd");
                var rutaTemporal  = @HttpContext.Current.Server.MapPath("~/Temp/Descargas/" + nombreArchivo + ".xlsx");
                int total;
                var tipoLinea = filterParam[0].ToString() == "NOMINA" ? "*" : "D";
                //new Utils.DeleteFile().deleteFile(HttpContext.Current.Server.MapPath(@"~/Utils/xlsxs/"));
                XSSFWorkbook book        = new XSSFWorkbook();
                var          contratoSis = new nContratoSis().listContratoByID(new CONTRATO_SYS()
                {
                    IDE_CONTRATO = cab.IDE_CONTRATO
                });
                var reglaArchivo = new ReglaArchivo()
                {
                    Archivo = filterParam[0].ToString(), TipoLinea = tipoLinea, NUM_CONT_LIC = Convert.ToInt32(contratoSis.NRO_CONTRATO), vigente = 1
                };
                var listReglaArchivo = new nReglaArchivo().getListReglaArchivo(reglaArchivo, 0, 1000, "IdReglaArchivo ASC", out total);
                if (reglaArchivo.Archivo.Equals("0"))
                {
                    listReglaArchivo = listReglaArchivo.GroupBy(x => new { x.NombreCampo, x.TituloColumna })
                                       .Select(y => new ReglaArchivo()
                    {
                        NombreCampo = y.Key.NombreCampo, TituloColumna = y.Key.TituloColumna
                    }).ToList();
                }
                //crear el libro
                var sheet       = book.CreateSheet(nombreArchivo);
                var rowCabecera = sheet.CreateRow(1);
                var headerStyle = helperStyle.setFontText(12, true, book);
                var bodyStyle   = helperStyle.setFontText(11, false, book);
                //construir cabecera
                ICell cellCabecera;
                for (int i = 0; i < listReglaArchivo.Count; i++)
                {
                    cellCabecera = rowCabecera.CreateCell(i + 1);
                    cellCabecera.SetCellValue(listReglaArchivo[i].TituloColumna);
                    cellCabecera.CellStyle = headerStyle;
                }
                //consultar datos segun los filtros especificados
                if (filterParam[0].ToString() == "NOMINA")
                {
                    var listNomina = new nNomina().listNominaConsulta(nomina, filterParam, 0, 100000, out total);
                    for (int i = 0; i < listNomina.Count; i++)
                    {
                        IRow  rowBody = sheet.CreateRow(i + 2);
                        ICell cellBody;
                        for (int c = 0; c < listReglaArchivo.Count; c++)
                        {
                            cellBody = rowBody.CreateCell(c + 1);
                            var property = listNomina[i].GetType().GetProperty(listReglaArchivo[c].NombreCampo.ToString().Trim(), BindingFlags.Public | BindingFlags.Instance);
                            cellBody.SetCellValue(property.GetValue(listNomina[i], null) == null ? "" : property.GetValue(listNomina[i], null).ToString());
                            cellBody.CellStyle = bodyStyle;
                        }
                    }
                }
                else
                {
                    var listHistoriaLinDet = new dPagoCargado().listArchivoCargado(cab, det, filterParam, 0, 100000, "TipoLinea ASC", out total);
                    for (int i = 0; i < listHistoriaLinDet.Count; i++)
                    {
                        IRow  rowBody = sheet.CreateRow(i + 2);
                        ICell cellBody;
                        for (int c = 0; c < listReglaArchivo.Count; c++)
                        {
                            cellBody = rowBody.CreateCell(c + 1);
                            var property = listHistoriaLinDet[i].GetType().GetProperty(listReglaArchivo[c].NombreCampo.ToString().Trim(), BindingFlags.Public | BindingFlags.Instance);
                            cellBody.SetCellValue(property.GetValue(listHistoriaLinDet[i], null) == null ? "" : property.GetValue(listHistoriaLinDet[i], null).ToString());
                            cellBody.CellStyle = bodyStyle;
                        }
                    }
                }
                if (File.Exists(rutaTemporal))
                {
                    File.Delete(rutaTemporal);
                }
                //guardar el archivo creado en memoria
                using (var file = new FileStream(rutaTemporal, FileMode.Create, FileAccess.ReadWrite))
                {
                    book.Write(file);
                    file.Close();
                    book.Close();
                }
                return(rutaTemporal);
            }
            catch (System.Exception ex)
            {
                throw;
            }
        }