Example #1
0
        private EDCargueMasivo ProcesarCargue(ExcelWorksheet sheet, EDCargueMasivo cargue)
        {
            EDCargueMasivo    edCargue  = new EDCargueMasivo();
            List <EDAusencia> Ausencias = new List <EDAusencia>();
            LNAusencia        use       = new LNAusencia();
            bool tieneDatos             = false;
            bool result = false;

            int      consecutivo;
            int      conscutivopadre;
            int      CodTipoDocumento;
            string   Nit_Empresa;
            int      Cod_Departamento;
            int      Cod_Municipio;
            int      Cod_Sede;
            int      Cod_Tipo_Documento;
            string   Num_Documento;
            string   Nombre_Trabajador;
            int      Edad;
            string   Genero;
            int      Cod_Ocupacion;
            string   Nombre_EPS;
            string   Tipo_Vinculacion;
            int      Salario_Base;
            int      Cod_Contingencia;
            int      Cod_Area;
            DateTime Fecha_Inicio;
            DateTime Fecha_Fin;
            int      Cod_Diagnostico;
            decimal  Factor_Prestacional;
            string   Observacion;

            int DiasLaborables = 5;
            int diasCalculados = 0;

            try
            {
                var        dt         = new DataTable();
                var        rowCnt     = sheet.Dimension.End.Row;
                LNAusencia lnAusencia = new LNAusencia();


                //Verificamos los nombres de las columnas
                // Loop through Columns
                for (var fila = 2; fila <= rowCnt; fila++)
                {
                    EDAusencia Ausencia = new EDAusencia();

                    if (sheet.Cells[fila, 1].Value == null || sheet.Cells[fila, 2].Value == null || sheet.Cells[fila, 3].Value == null ||
                        sheet.Cells[fila, 4].Value == null || sheet.Cells[fila, 5].Value == null || sheet.Cells[fila, 6].Value == null || sheet.Cells[fila, 7].Value == null ||
                        sheet.Cells[fila, 8].Value == null || sheet.Cells[fila, 9].Value == null || sheet.Cells[fila, 10].Value == null || sheet.Cells[fila, 11].Value == null ||
                        sheet.Cells[fila, 12].Value == null || sheet.Cells[fila, 13].Value == null || sheet.Cells[fila, 14].Value == null ||
                        sheet.Cells[fila, 15].Value == null || sheet.Cells[fila, 16].Value == null || sheet.Cells[fila, 17].Value == null ||
                        sheet.Cells[fila, 18].Value == null || sheet.Cells[fila, 19].Value == null || sheet.Cells[fila, 20].Value == null ||
                        sheet.Cells[fila, 21].Value == null || sheet.Cells[fila, 22].Value == null)
                    {
                        edCargue.Message = "Existen campos en blanco por favor revise la fila " + fila + "; es obligatorio diligenciar todas las columnas excepto observaciones.";
                        return(edCargue);
                    }
                    try { consecutivo = int.Parse(sheet.Cells[fila, 1].Value.ToString()); }
                    catch
                    {
                        edCargue.Message = "El valor del campo consecutivo en la fila " + fila + ", tiene que ser un número entero.";
                        return(edCargue);
                    }
                    try { conscutivopadre = int.Parse(sheet.Cells[fila, 2].Value.ToString()); }
                    catch
                    {
                        edCargue.Message = "El valor del campo consecutivopadre en la fila " + fila + ", tiene que ser un número entero.";
                        return(edCargue);
                    }
                    if (conscutivopadre > 0 && fila == 2)
                    {
                        edCargue.Message = "El primer resgistro no puede ser un registro que indica prorroga, debe tener un registro padre que indica la ausencia inicial.";
                        return(edCargue);
                    }
                    try
                    {
                        CodTipoDocumento = VerificarTipoDocumento(int.Parse(sheet.Cells[fila, 3].Value.ToString()));
                        if (CodTipoDocumento < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Tipo_Documento ingresado en la fila " + fila + ", por favor verifique con la lista en la hoja Documentos. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Tipo_Documento en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Documentos.";
                        return(edCargue);
                    }

                    Nit_Empresa = sheet.Cells[fila, 4].Value.ToString();
                    if (fila < 3)
                    {
                        DiasLaborables = lnAusencia.ObtenerDiasLaborablesEmpresa(Nit_Empresa);
                    }
                    try
                    {
                        Cod_Departamento = VerificarDepartamento(int.Parse(sheet.Cells[fila, 5].Value.ToString()));
                        if (Cod_Departamento < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Departamento ingresado en la fila " + fila + ", por favor verifique con la lista en la hoja Departamentos. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Departamento en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Departamentos.";
                        return(edCargue);
                    }
                    try
                    {
                        Cod_Municipio = VerificarMunicipio(int.Parse(sheet.Cells[fila, 6].Value.ToString()), Cod_Departamento);
                        if (Cod_Municipio < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Municipio de la fila " + fila + " asociado al Cod_Departamento ingresado, por favor verifique con la lista en la hoja Municipios. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Municipio en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Municipios.";
                        return(edCargue);
                    }
                    try
                    {
                        Cod_Sede = VerificarSede(int.Parse(sheet.Cells[fila, 7].Value.ToString()), Nit_Empresa);
                        if (Cod_Sede < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Sede de la fila " + fila + " asociada al Nit ingresado, por favor verifique con la lista en la hoja Sedes. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Sede en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Sedes.";
                        return(edCargue);
                    }
                    try
                    {
                        Cod_Tipo_Documento = VerificarTipoDocumento(int.Parse(sheet.Cells[fila, 8].Value.ToString()));
                        if (Cod_Tipo_Documento < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Tipo_Documento ingresado en la fila " + fila + ", por favor verifique con la lista en la hoja Documentos. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Tipo_Documento en la fila" + fila + ", tiene que ser un número entero tomado de lista en la hoja Documentos.";
                        return(edCargue);
                    }

                    Num_Documento     = sheet.Cells[fila, 9].Value.ToString();
                    Nombre_Trabajador = sheet.Cells[fila, 10].Value.ToString();
                    try { Edad = int.Parse(sheet.Cells[fila, 11].Value.ToString()); }
                    catch
                    {
                        edCargue.Message = "El valor del campo Edad en la fila " + fila + ", tiene que ser un número entero.";
                        return(edCargue);
                    }

                    if (sheet.Cells[fila, 12].Value.ToString().ToUpper().Equals("F") || sheet.Cells[fila, 12].Value.ToString().ToUpper().Equals("M"))
                    {
                        Genero = sheet.Cells[fila, 12].Value.ToString().ToUpper();
                    }
                    else
                    {
                        edCargue.Message = "El valor ingresado en Genero fila " + fila + ", no es un valor de genero valido,  por favor ingrese F o M. ";
                        return(edCargue);
                    }
                    try
                    {
                        Cod_Ocupacion = VerificarOcupacion(int.Parse(sheet.Cells[fila, 13].Value.ToString()));
                        if (Cod_Ocupacion < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Ocupacion ingresado en la fila " + fila + ", por favor verifique con la lista en la hoja Ocupaciones. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Ocupacion en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Ocupaciones.";
                        return(edCargue);
                    }

                    Nombre_EPS       = sheet.Cells[fila, 14].Value.ToString();
                    Tipo_Vinculacion = sheet.Cells[fila, 15].Value.ToString();
                    try { Salario_Base = int.Parse(sheet.Cells[fila, 16].Value.ToString()); }
                    catch
                    {
                        edCargue.Message = "El valor del campo Salario_Base en la fila " + fila + ", tiene que ser un número entero sin puntos.";
                        return(edCargue);
                    }
                    try
                    {
                        Cod_Contingencia = VerificarContingencia(int.Parse(sheet.Cells[fila, 17].Value.ToString()));
                        if (Cod_Contingencia < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Contingencia ingresado en la fila " + fila + ", por favor verifique con la lista en la hoja Contingencias. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Contingencia en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Contingencias.";
                        return(edCargue);
                    }
                    try
                    {
                        Cod_Area = VerificarProceso(int.Parse(sheet.Cells[fila, 18].Value.ToString()), Nit_Empresa);
                        if (Cod_Area < 1)
                        {
                            edCargue.Message = "No se encontró el Cod_Area de la fila " + fila + " asociado al Nit ingresado, por favor verifique con la lista en la hoja Areas. ";
                            return(edCargue);
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Area en la fila " + fila + ", tiene que ser un número entero tomado de lista en la hoja Areas.";
                        return(edCargue);
                    }
                    try { Fecha_Inicio = Convert.ToDateTime(sheet.Cells[fila, 19].Value, CultureInfo.InvariantCulture); }
                    catch
                    {
                        edCargue.Message = "El valor del campo Fecha_Inicio en la fila " + fila + ", no es una fecha valida o no tiene el formato DD/MM/YYYY.";
                        return(edCargue);
                    }
                    try { Fecha_Fin = Convert.ToDateTime(sheet.Cells[fila, 20].Value, CultureInfo.InvariantCulture); }
                    catch
                    {
                        edCargue.Message = "El valor del campo Fecha_Fin en la fila " + fila + ", no es una fecha valida o no tiene el formato DD/MM/YYYY.";
                        return(edCargue);
                    }
                    try
                    {
                        if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.AccidenteTrabajo || Cod_Contingencia == (int)EnumAusentismo.Contingencias.EnfermedadGeneral || Cod_Contingencia == (int)EnumAusentismo.Contingencias.EnfermedadLaboral)
                        {
                            Cod_Diagnostico = VerificarDiagnostico(sheet.Cells[fila, 21].Value.ToString());
                            if (Cod_Diagnostico < 1)
                            {
                                edCargue.Message = "No se encontró el Cod_Diagnostico ingresado en la fila " + fila + ", por favor verifique con la lista en la hoja Diagnosticos. ";
                                return(edCargue);
                            }
                        }
                        else
                        {
                            Cod_Diagnostico = 0;
                        }
                    }
                    catch
                    {
                        edCargue.Message = "El valor del campo Cod_Diagnostico en la fila " + fila + ", debe ser alfanumerico tomado de lista en la hoja Diagnosticos.";
                        return(edCargue);
                    }
                    try { Factor_Prestacional = Convert.ToDecimal(sheet.Cells[fila, 22].Value, CultureInfo.InvariantCulture); }
                    catch
                    {
                        edCargue.Message = "El valor del campo Factor_Prestacional en la fila " + fila + ", no es valido.";
                        return(edCargue);
                    }

                    if (Fecha_Inicio > Fecha_Fin)
                    {
                        edCargue.Message = "La fecha de inicio es mayor que la fecha fin en la fila " + fila + ".";
                        return(edCargue);
                    }

                    Observacion = string.Empty;
                    if (sheet.Cells[fila, 23].Value != null)
                    {
                        Observacion = sheet.Cells[fila, 23].Value.ToString();
                    }

                    if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.LicenciaPaternidad)
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                        if (diasCalculados != 8)
                        {
                            edCargue.Message = "La licencia de paternidad debe ser de 8 dias habiles, por favor verifique las fechas de inicio y fin en la fila " + fila;
                            return(edCargue);
                        }
                    }
                    else if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.LicenciaLuto)
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                        if (diasCalculados != 5)
                        {
                            edCargue.Message = "La licencia de luto debe ser de 5 dias habiles, por favor verifique las fechas de inicio y fin en la fila " + fila;
                            return(edCargue);
                        }
                    }
                    else if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.LicenciaMaternidad)
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                        if (diasCalculados != 126)
                        {
                            edCargue.Message = "La licencia de maternidad debe ser de 126 días calendario, por favor verifique las fechas de inicio y fin en la fila " + fila;
                            return(edCargue);
                        }
                    }
                    else if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.LicenciaMaternidadMultiple)
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                        if (diasCalculados != 140)
                        {
                            edCargue.Message = "La licencia de maternidad por Parto Múltiple debe ser de 140 días calendario, por favor verifique las fechas de inicio y fin en la fila " + fila;
                            return(edCargue);
                        }
                    }
                    else if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.LicenciaMaternidadPrematuro)
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                        if (diasCalculados <= 126 || diasCalculados > 217)
                        {
                            edCargue.Message = "La licencia de maternidad por Nacimiento Prematura debe ser superior a 126 dias y no sobrepasar los 217 días calendario, por favor verifique las fechas de inicio y fin en la fila " + fila;
                            return(edCargue);
                        }
                    }

                    else if (Cod_Contingencia == (int)EnumAusentismo.Contingencias.PermisoPorHorasDia)
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                        if (diasCalculados > 1)
                        {
                            edCargue.Message = "El permiso por dias no debe superar 1 dia, por favor verifique que las fechas de inicio y fin sean iguales en la fila " + fila;
                            return(edCargue);
                        }
                    }
                    else
                    {
                        diasCalculados = lnAusencia.CalcularDiasLaborales(Fecha_Inicio, Fecha_Fin, DiasLaborables, Cod_Contingencia);
                    }

                    // Ausencia.IdAusencia = consecutivo;
                    Ausencia.consecutivoPadre   = conscutivopadre;
                    Ausencia.Documento          = Num_Documento;
                    Ausencia.IdEmpresa          = Nit_Empresa;
                    Ausencia.IdEmpresaUsuaria   = cargue.Id_Empresa_Usuaria;
                    Ausencia.idDepartamento     = Cod_Departamento;
                    Ausencia.idMunicipio        = Cod_Municipio;
                    Ausencia.IdContingencia     = Cod_Contingencia;
                    Ausencia.IdDiagnostico      = Cod_Diagnostico;
                    Ausencia.IdSede             = Cod_Sede;
                    Ausencia.IdProceso          = Cod_Area;
                    Ausencia.FechaInicio        = Fecha_Inicio;
                    Ausencia.FechaFin           = Fecha_Fin;
                    Ausencia.DiasAusencia       = diasCalculados;
                    Ausencia.Costo              = ((Salario_Base / 30) * Ausencia.DiasAusencia) * Factor_Prestacional;
                    Ausencia.FactorPrestacional = Factor_Prestacional;
                    Ausencia.Observaciones      = Observacion;
                    Ausencia.IdOcupacion        = Cod_Ocupacion;
                    Ausencia.Sexo            = Genero;
                    Ausencia.Edad            = Edad;
                    Ausencia.Eps             = Nombre_EPS;
                    Ausencia.TipoVinculacion = Tipo_Vinculacion;
                    Ausencia.NombrePersona   = Nombre_Trabajador;

                    Ausencias.Add(Ausencia);
                    tieneDatos = true;
                }
                if (tieneDatos)
                {
                    return(aus.InsertarAusenciasCargueMasivo(Ausencias));
                }
                else
                {
                    edCargue.Message = "El proceso de cargue fallo, El archivo no contiene información valida";
                }
            }
            catch (Exception ex)
            {
                RegistraLog registraLog = new RegistraLog();
                registraLog.RegistrarError(typeof(LNCargue), string.Format("Error en el método WorksheetToDataTable {0}: {1}", DateTime.Now, ex.StackTrace), ex);
                edCargue.Message = "El proceso de cargue fallo: La estructura del archivo no es valida";
                return(edCargue);
            }
            return(edCargue);
        }