private string ObtenerJornadasReportadas(DateTime dUMC, string sCR, string sGF, string sIncompletos, string sExternos, string sOtrosNodos, string sSoloProyAbiertos, string sForaneos) { string sResul = ""; StringBuilder sb = new StringBuilder(); double dDLR = 0, dDLC = 0, dHLC = 0, dHR = 0; bool bHaTrabajadoTodoElMes = true; try { sb.Append("<table id='tblDatos' class='texto' style='width:950px;'>"); sb.Append("<colgroup>"); sb.Append(" <col style='width:20px' />"); sb.Append(" <col style='width:335px' />"); sb.Append(" <col style='width:65px' />"); sb.Append(" <col style='width:180px' />"); sb.Append(" <col style='width:50px;' />"); sb.Append(" <col style='width:50px;' />"); sb.Append(" <col style='width:50px;' />"); sb.Append(" <col style='width:50px;' />"); sb.Append(" <col style='width:50px;' />"); sb.Append(" <col style='width:50px;' />"); sb.Append(" <col style='width:50px;' />"); sb.Append("</colgroup>"); sb.Append("<tbody>"); ds = Consumo.ObtenerJornadasReportadasDS(Fechas.FechaAAnnomes(dUMC), (int)Session["UsuarioActual"], (sCR == "") ? null : (int?)int.Parse(sCR), (sGF == "") ? null : (int?)int.Parse(sGF), (sExternos == "1") ? true : false, (sOtrosNodos == "1") ? true : false, (sSoloProyAbiertos == "1") ? true : false, (sForaneos == "1") ? true : false ); //Gente cuya fecha de alta o de baja está dentro del mes siguiente al último mes cerrado //Hay que calcularles el número de días laborables para los días que han trabajado en el mes. DateTime dInicioMes = dUMC;//.AddDays(1); DateTime dFinMes = dUMC.AddMonths(1).AddDays(-1); DateTime dAlta; DateTime?dBaja = null; if (ds.Tables[0].Rows.Count > 0) { foreach (DataRow oFila in ds.Tables[0].Rows) { //} //for (int i = 0; i < ds.Tables[0].Rows.Count; i++) //{ #region Indices de campos /* * 0 - t314_idusuario, * 1 - t001_sexo * 2 - tecnico, * 3 - UDR, * 4 - Calendario, * 5 - JLCalendario, * 6 - HLCalendario * 7 - Dias laborables reportados,(jornadas reportadas) * 8 - Horas, * 9 - Jornadas, * 10 - t314_falta, * 11 - t314_fbaja, * 12 - denominacion une, * 13 - denominacion empresa o proveedor * 14 - estado baja (FICEPI y SUPER) * 15- jornadas económicas, */ #endregion dBaja = null; dAlta = DateTime.Parse(oFila["t314_falta"].ToString()); if (oFila["t314_fbaja"] != System.DBNull.Value) { dBaja = DateTime.Parse(oFila["t314_fbaja"].ToString()); } //Días laborables reportados dDLR = Math.Round(double.Parse(oFila["JReportadas"].ToString()), 2, MidpointRounding.AwayFromZero); //Días laborables del calendario dDLC = Math.Round(double.Parse(oFila["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero); //Horas laborables del calendario dHLC = Math.Round(double.Parse(oFila["HLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero); //Horas reportadas dHR = Math.Round(double.Parse(oFila["Horas"].ToString()), 2, MidpointRounding.AwayFromZero); int nIncompleto = 0; //Control de fechas //Calcular días laborables de una persona en un mes, en función de las fechas de alta y baja #region nº días laborables en el mes if ((dAlta > dInicioMes && dAlta < dFinMes) && (dBaja != null && dBaja >= dInicioMes && dBaja <= dFinMes)) { bHaTrabajadoTodoElMes = false; #region alta y baja en el mismo mes. /* * switch (sIncompletos) * { * case "1": * SqlDataReader drUsuario1 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); * //nDias = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); * if (drUsuario1.Read()) * { * if (Math.Round(double.Parse(oFila["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario1["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 1; * } * drUsuario1.Close(); * drUsuario1.Dispose(); * break; * case "2": * SqlDataReader drUsuario2 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); * if (drUsuario2.Read()) * { * if (Math.Round(double.Parse(oFila["Horas"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario2["HLC"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 2; * } * drUsuario2.Close(); * drUsuario2.Dispose(); * break; * case "3": * SqlDataReader drUsuario3 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); * if (drUsuario3.Read()) * { * if (Math.Round(double.Parse(oFila["horas_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario3["HLC"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 3; * } * drUsuario3.Close(); * drUsuario3.Dispose(); * break; * case "4": * SqlDataReader drUsuario4 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); * if (drUsuario4.Read()) * { * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario4["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 4; * } * drUsuario4.Close(); * drUsuario4.Dispose(); * break; * case "5": * SqlDataReader drUsuario5 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); * if (drUsuario5.Read()) * { * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) > Math.Round(double.Parse(drUsuario5["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 5; * } * drUsuario5.Close(); * drUsuario5.Dispose(); * break; * } */ #endregion } else { if (dAlta > dInicioMes && dAlta < dFinMes) { bHaTrabajadoTodoElMes = false; #region alta en el mes /* * switch (sIncompletos) * { * case "1": * SqlDataReader drUsuario1 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dFinMes); * //nDias = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dFinMes); * if (drUsuario1.Read()) * { * if (dDLR < Math.Round(double.Parse(drUsuario1["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 1; * } * drUsuario1.Close(); * drUsuario1.Dispose(); * break; * case "2": * SqlDataReader drUsuario2 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dFinMes); * if (drUsuario2.Read()) * { * if (Math.Round(double.Parse(oFila["Horas"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario2["HLC"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 2; * } * drUsuario2.Close(); * drUsuario2.Dispose(); * break; * case "3": * SqlDataReader drUsuario3 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dFinMes); * if (drUsuario3.Read()) * { * if (Math.Round(double.Parse(oFila["horas_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario3["HLC"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 3; * } * drUsuario3.Close(); * drUsuario3.Dispose(); * break; * case "4": * SqlDataReader drUsuario4 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dFinMes); * if (drUsuario4.Read()) * { * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario4["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 4; * } * drUsuario4.Close(); * drUsuario4.Dispose(); * break; * case "5": * SqlDataReader drUsuario5 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dFinMes); * if (drUsuario5.Read()) * { * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) > Math.Round(double.Parse(drUsuario5["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 5; * } * drUsuario5.Close(); * drUsuario5.Dispose(); * break; * * * } */ #endregion dBaja = dFinMes; } else if (dBaja != null && dBaja >= dInicioMes && dBaja <= dFinMes) { bHaTrabajadoTodoElMes = false; #region baja en el mes /* * switch (sIncompletos) * { * case "1": * SqlDataReader drUsuario1 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dInicioMes, dBaja); * //nDias = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dInicioMes, dBaja); * if (drUsuario1.Read()) * { * if (dDLR < Math.Round(double.Parse(drUsuario1["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 1; * } * drUsuario1.Close(); * drUsuario1.Dispose(); * break; * case "2": * SqlDataReader drUsuario2 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dInicioMes, dBaja); * if (drUsuario2.Read()) * { * if (Math.Round(double.Parse(oFila["Horas"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario2["HLC"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 2; * } * drUsuario2.Close(); * drUsuario2.Dispose(); * break; * case "3": * SqlDataReader drUsuario3 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dInicioMes, dBaja); * if (drUsuario3.Read()) * { * if (Math.Round(double.Parse(oFila["horas_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario3["HLC"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 3; * } * drUsuario3.Close(); * drUsuario3.Dispose(); * break; * case "4": * SqlDataReader drUsuario4 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dInicioMes, dBaja); * if (drUsuario4.Read()) * { * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(drUsuario4["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 4; * } * drUsuario4.Close(); * drUsuario4.Dispose(); * break; * case "5": * SqlDataReader drUsuario5 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dInicioMes, dBaja); * if (drUsuario5.Read()) * { * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) > Math.Round(double.Parse(drUsuario5["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 5; * } * drUsuario5.Close(); * drUsuario5.Dispose(); * break; * } */ #endregion dAlta = dInicioMes; } else { #region de alta todo el mes /* * switch (sIncompletos) * { * case "1": * //nDias = int.Parse(oFila["JReportadas"].ToString()); * if (dDLR < Math.Round(double.Parse(oFila["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 1; * break; * case "2": * if (Math.Round(double.Parse(oFila["Horas"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(oFila["HLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 2; * break; * case "3": * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(oFila["HLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 3; * break; * case "4": * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) < Math.Round(double.Parse(oFila["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 4; * break; * case "5": * * if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) > Math.Round(double.Parse(oFila["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero)) * nIncompleto = 5; * break; * } */ #endregion dAlta = dInicioMes; dBaja = dFinMes; } } if (!bHaTrabajadoTodoElMes) { SqlDataReader drUsuario1 = Consumo.ObtenerJornadasReportadasUsuario((int)oFila["t314_idusuario"], dAlta, dBaja); if (drUsuario1.Read()) { dDLC = Math.Round(double.Parse(drUsuario1["JLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero); dHLC = Math.Round(double.Parse(drUsuario1["HLC"].ToString()), 2, MidpointRounding.AwayFromZero); } drUsuario1.Close(); drUsuario1.Dispose(); } #endregion switch (sIncompletos) { case "1": //dias reportados < dias laborables del calendario if (dDLR < dDLC) { nIncompleto = 1; } break; case "2": //horas reportadas < horas laborables del calendario if (dHR < dHLC) { nIncompleto = 2; } break; case "3": //unidades económicas (horas + extraerHoras[dias]) < horas laborables del calendario if (Math.Round(double.Parse(oFila["unidades_cmp"].ToString()), 2, MidpointRounding.AwayFromZero) != dHR) { //09/11/2015 Xabi dice que podemos aplicar un margen de diferencia de 0,5 double dDiff = double.Parse(oFila["unidades_cmp"].ToString()) - dHR; if (Math.Abs(dDiff) >= 0.5) { nIncompleto = 3; } } break; } //Si el usuario ha pedido solo los incompletos, solo saco esas líneas if (sIncompletos == "0" || (sIncompletos == "1" && nIncompleto == 1) || (sIncompletos == "2" && nIncompleto == 2) || (sIncompletos == "3" && nIncompleto == 3) ) { #region Poner datos //sb.Append("<tr onmouseover='TTip(this);' incom='" + nIncompleto + "'>"); //Nº usuario //sb.Append("<td>" + int.Parse(ds.Tables[0].Rows[i].ItemArray[0].ToString()).ToString("#,###") + "</td>"); sb.Append("<tr R=" + ((int)oFila["t314_idusuario"]).ToString("#,###") + " style='height:20px;'"); if (oFila["t001_tiporecurso"].ToString() == "F") { sb.Append(" tipo ='F'"); } else { if (oFila["t303_denominacion"].ToString() == "") { sb.Append(" tipo ='E'"); } else { sb.Append(" tipo ='P'"); } } sb.Append(" nodo =\"" + Utilidades.escape(oFila["t303_denominacion"].ToString()) + "\""); sb.Append(" sexo ='" + oFila["t001_sexo"].ToString() + "'"); sb.Append(" baja ='" + oFila["baja"].ToString() + "'>"); //sb.Append("<td><IMG src='../../../../images/imgUsu" + ds.Tables[0].Rows[i].ItemArray[1].ToString() + ".gif' class='ICO' style='margin-right:2px;'></td>"); sb.Append("<td style=\"border-right:''\"></td>"); sb.Append("<td><span class='NBR W330' style='noWrap:true;' title=\"cssbody=[dvbdy] cssheader=[dvhdr] header=[<img src='../../../../images/info.gif' style='vertical-align:middle' /> Información] body=[<label style='width:70px;'>Profesional:</label>" + oFila["tecnico"].ToString().Replace((char)34, (char)39) + "<br><label style='width:70px;'>Usuario:</label>" + ((int)oFila["t314_idusuario"]).ToString("#,###") + "<br><label style='width:70px;'>" + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + ":</label>" + oFila["t303_denominacion"].ToString().Replace((char)34, (char)39) + "<br><label style='width:70px;'>Visión por:</label>" + oFila["desmotivo"].ToString() + "] hideselects=[off]\" >" + oFila["tecnico"].ToString() + "</span></td>"); //Profesional //sb.Append("<td title='" + ds.Tables[0].Rows[i].ItemArray[11].ToString() + "'><nobr class='NBR' style='width:360px;'>" + ds.Tables[0].Rows[i].ItemArray[1].ToString() + "</nobr></td>"); //UDR if (oFila["UDR"] != DBNull.Value) { sb.Append("<td style='text-align:center;'>" + DateTime.Parse(oFila["UDR"].ToString()).ToShortDateString() + "</td>"); } else { sb.Append("<td></td>"); } //Calendario sb.Append("<td><span class='NBR' style='width:180px;'>" + oFila["Calendario"].ToString() + "</span></td>"); //Días laborables Calendario sb.Append("<td style='text-align:right;'>" + oFila["JLCalendario"].ToString() + "</td>"); //Dias laborables reportados //oFila["Jornadas"] -> esfuerzo reportado en jornadas //oFila["JReportadas"] -> nº de días naturales reportados sb.Append("<td"); if (nIncompleto == 1) { sb.Append(" style='color:red;text-align:right;'");//DLR < DLC } else if (Math.Round(double.Parse(oFila["Jornadas"].ToString()), 2, MidpointRounding.AwayFromZero) < dDLR) { sb.Append(" style='color:blue;text-align:right;'");//Esfuerzo en jornadas < Días naturales reportados } else { sb.Append(" style='text-align:right;'"); } sb.Append(" >" + oFila["JReportadas"].ToString() + "</td>"); //Horas laborables Calendario sb.Append("<td style='text-align:right;'>" + Math.Round(double.Parse(oFila["HLCalendario"].ToString()), 2, MidpointRounding.AwayFromZero).ToString("N") + "</td>"); //Horas reportadas sb.Append("<td style='text-align:right;'>" + Math.Round(double.Parse(oFila["Horas"].ToString()), 2, MidpointRounding.AwayFromZero).ToString("N") + "</td>"); //Jornadas reportadas sb.Append("<td style='text-align:right;'>" + Math.Round(double.Parse(oFila["Jornadas"].ToString()), 2, MidpointRounding.AwayFromZero).ToString("N") + "</td>"); //Horas económicas sb.Append("<td style='text-align:right;'>" + Math.Round(double.Parse(oFila["horas_cmp"].ToString()), 2, MidpointRounding.AwayFromZero).ToString("N") + "</td>"); //Jornadas económicas sb.Append("<td style=\"border-right:'';text-align:right;\">" + Math.Round(double.Parse(oFila["jornadas_cmp"].ToString()), 2, MidpointRounding.AwayFromZero).ToString("N") + "</td>"); sb.Append("</tr>"); #endregion } } } ds.Dispose(); sb.Append("</tbody>"); sb.Append("</table>"); sResul = "OK@#@" + sb.ToString(); sb.Length = 0; //Para liberar memoria } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al obtener los consumos reportados.", ex); } return(sResul); }