Esempio n. 1
0
    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);
    }