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); }