Exemplo n.º 1
0
        private DataTable ObtieneTableroControl()
        {
            TableroControlNegocio nTablero = new TableroControlNegocio();

            vLstColumnas       = nTablero.ObtenerPeriodosEvaluadosTableroControl(vIdTableroControl, vIdEmpleado).ToList();
            vLstEvaluados      = nTablero.ObtenerEvaluadosTableroControl(vIdTableroControl, vIdEmpleado, pIdRol: vIdRol).ToList();
            vLstCompatibilidad = nTablero.ObtenerCompatibilidadPuestoTablero(vIdTableroControl, vIdEmpleado, vIdPuesto).ToList();
            vLstResultFyD      = nTablero.ObtenerResultadosFyDTableroControl(vIdTableroControl, vIdEmpleado, vIdPuesto).ToList();
            vLstResultEd       = nTablero.ObtenerResultadosEDTableroControl(vIdTableroControl, vIdEmpleado).ToList();
            vLstClimaLaboral   = nTablero.ObtenerClimaLaboralTablero(vIdTableroControl, vIdEmpleado).ToList();
            vLstTabuladores    = nTablero.ObtenerTabuladoresTableroControl(vIdTableroControl, vIdEmpleado).ToList();
            var vPeriodoTablero = nTablero.ObtenerPeriodoTableroControl(vIdTableroControl, null, vIdEmpleado, vIdPuesto).FirstOrDefault();

            string vDivsCeldaPromedio = "";
            string vAdicionales       = "";
            string vDivsCeldasPo      = "<table class=\"tablaColor\"> " +
                                        "<tr> " +
                                        "<td class=\"porcentaje\"> " +
                                        "<div class=\"divPorcentaje\">{0}</div> " +
                                        "</td> " +
                                        "<td class=\"color\"> " +
                                        "<div class=\"{1}\">&nbsp;</div> " +
                                        "</td> </tr> </table>";


            DataTable vDtPivot = new DataTable();

            vDtPivot.Columns.Add("FI_FOTOGRAFIA", typeof(string));
            vDtPivot.Columns.Add("NB_EMPLEADO_PUESTO", typeof(string));
            vDtPivot.Columns.Add("ID_EVALUADO", typeof(string));

            //  if (vFgComentarios == true)
            vDtPivot.Columns.Add("DS_COMENTARIOS", typeof(string));

            if (vPeriodoTablero != null)
            {
                if (vPeriodoTablero.FG_EVALUACION_IDP == true)
                {
                    vDtPivot.Columns.Add("COMPATIVILIDAD_VS_PUESTO", typeof(string));
                }

                foreach (var item in vLstColumnas)
                {
                    if (item.CL_TIPO_PERIODO_REFERENCIA == "FD_EVALUACION")
                    {
                        vDtPivot.Columns.Add(item.ID_PERIODO_REFERENCIA.ToString(), typeof(string));
                    }
                }

                foreach (var item in vLstColumnas)
                {
                    switch (item.CL_TIPO_PERIODO_REFERENCIA)
                    {
                    case "EO_DESEMPENO":
                        vDtPivot.Columns.Add(item.ID_PERIODO_REFERENCIA.ToString(), typeof(string));
                        break;

                    case "EO_CLIMA":
                        vDtPivot.Columns.Add(item.ID_PERIODO_REFERENCIA.ToString(), typeof(string));
                        break;

                    case "TABULADOR":
                        vDtPivot.Columns.Add("T" + item.ID_PERIODO_REFERENCIA.ToString(), typeof(string));
                        break;
                    }
                }

                if (vPeriodoTablero.FG_EVALUACION_FYD == true)
                {
                    vDtPivot.Columns.Add("TENDENCIA_FYD", typeof(string));
                }
                if (vPeriodoTablero.FG_EVALUACION_DESEMPEÑO == true)
                {
                    vDtPivot.Columns.Add("TENDENCIA_ED", typeof(string));
                }

                vDtPivot.Columns.Add("PROMEDIO", typeof(string));

                if (vPeriodoTablero.FG_EVALUACION_DESEMPEÑO == true)
                {
                    vDtPivot.Columns.Add("BONO", typeof(string));
                }
            }
            else
            {
                vDtPivot.Columns.Add("COMPATIVILIDAD_VS_PUESTO", typeof(string));
                vDtPivot.Columns.Add("PROMEDIO", typeof(string));
            }


            foreach (var item in vLstEvaluados)
            {
                decimal?vPromedio      = 0;
                decimal?vPorcentajeIDP = 0;
                decimal?vPorcentajeFYD = 0;
                int     vNumPeriodoFyD = 0;
                decimal?vPorcentajeED  = 0;
                int     vNumPeriodoED  = 0;
                decimal?vPorcentajeCL  = 0;
                int     vNumPeriodoCL  = 0;
                double  vPromedioTotal = 0.0;

                DataRow vDr = vDtPivot.NewRow();

                vDr["DS_COMENTARIOS"] = item.DS_COMENTARIO;

                var vResultado = vLstEvaluados.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.FI_FOTOGRAFIA != null).FirstOrDefault();
                if (vResultado != null)
                {
                    vDr["FI_FOTOGRAFIA"] = "<div class=\"image_resize\"><img id=\"profileImage\" src=\"data:image/jpg;base64, " + Convert.ToBase64String(vResultado.FI_FOTOGRAFIA) + "\"></div>";
                }
                else
                {
                    vDr["FI_FOTOGRAFIA"] = "<div class=\"image_resize\"><img id=\"profileImage\"></div>";
                }

                if (item.XML_CAMPOS_ADICIONALES != null)
                {
                    vAdicionales = ObtenerAdicionales(item.XML_CAMPOS_ADICIONALES.ToString());
                }

                vDr["NB_EMPLEADO_PUESTO"] = "<p title=\"Clave: " + item.CL_EMPLEADO + ", " + item.CL_DEPARTAMENTO + " " + item.NB_DEPARTAMENTO + ", " + vAdicionales + "\"><a href=\"javascript:OpenInventario(" + item.ID_EMPLEADO + ")\">" + item.NB_EMPLEADO + "</a></p>" + "<p title=\"" + item.CL_PUESTO + "\"><a href=\"javascript:OpenDescriptivo(" + item.ID_PUESTO_PERIODO + ")\">" + item.NB_PUESTO + "</a></p>";
                vDr["ID_EVALUADO"]        = item.ID_EVALUADO.ToString();


                if (vPeriodoTablero != null)
                {
                    if (vPeriodoTablero.FG_EVALUACION_IDP == true)
                    {
                        var vCompatibilidad = vLstCompatibilidad.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PUESTO == item.ID_PUESTO_PERIODO).FirstOrDefault();
                        if (vCompatibilidad != null)
                        {
                            if (vCompatibilidad.PROMEDIO != null)
                            {
                                vPorcentajeIDP = vPorcentajeIDP + vCompatibilidad.PROMEDIO;
                                vDr["COMPATIVILIDAD_VS_PUESTO"] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\"><a href=\"javascript:openComparativaPuesto(" + vCompatibilidad.ID_CANDIDATO + ", " + vCompatibilidad.ID_PUESTO + ")\">" + vCompatibilidad.PROMEDIO.ToString() + "%</a></p>", vCompatibilidad.CL_COLOR_COMPATIBILIDAD);
                            }
                            else
                            {
                                vDr["COMPATIVILIDAD_VS_PUESTO"] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">N/A</p>", "divNa");
                            }
                        }

                        else
                        {
                            vDr["COMPATIVILIDAD_VS_PUESTO"] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">N/A</p>", "divNa");
                        }

                        vPromedio = vPromedio + ((vPorcentajeIDP) * (vPeriodoTablero.PR_IDP / 100));
                    }

                    foreach (var vColumn in vLstColumnas)
                    {
                        if (vColumn.CL_TIPO_PERIODO_REFERENCIA == "FD_EVALUACION")
                        {
                            var vResult = vLstResultFyD.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PERIODO_REFERENCIA == vColumn.ID_PERIODO_REFERENCIA).FirstOrDefault();
                            if (vResult != null)
                            {
                                vPorcentajeFYD = vPorcentajeFYD + vResult.PR_CUMPLIMIENTO;
                                vNumPeriodoFyD = vNumPeriodoFyD + 1;
                                vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\"><a href=\"javascript:OpenReporteIndividual(" + vResult.ID_EVALUADO + ", " + vResult.ID_PERIODO_REFERENCIA + ")\">" + vResult.PR_CUMPLIMIENTO.ToString() + "%</a></p>", vResult.CL_COLOR_CUMPLIMIENTO);
                            }
                            else
                            {
                                vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">N/A<p>", "divNa");
                            }
                        }

                        if (vColumn.CL_TIPO_PERIODO_REFERENCIA == "EO_DESEMPENO")
                        {
                            var vResult = vLstResultEd.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PERIODO_REFERENCIA == vColumn.ID_PERIODO_REFERENCIA).FirstOrDefault();
                            if (vResult != null)
                            {
                                vPorcentajeED = vPorcentajeED + vResult.PR_CUMPLIMIENTO_EVALUADO;
                                vNumPeriodoED = vNumPeriodoED + 1;
                                vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\"><a href=\"javascript:OpenReporteCumplimientoPersonal(" + vResult.ID_EVALUADO + ", " + vResult.ID_PERIODO_REFERENCIA + ")\">" + vResult.PR_CUMPLIMIENTO_EVALUADO.ToString() + "%</a></p>", vResult.CL_COLOR_CUMPLIMIENTO);
                            }
                            else
                            {
                                vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">N/A</p>", "divNa");
                            }
                        }

                        if (vColumn.CL_TIPO_PERIODO_REFERENCIA == "TABULADOR")
                        {
                            var vResult = vLstTabuladores.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PUESTO == item.ID_PUESTO_PERIODO).FirstOrDefault();
                            if (vResult != null)
                            {
                                string vIcono = ObtenerIconoDiferencia(vResult.DIFERENCIA, vResult.MN_SUELDO_ORIGINAL);
                                vDr["T" + vColumn.ID_PERIODO_REFERENCIA.ToString()] = "<p title=\"" + vResult.MN_SUELDO_ORIGINAL.ToString() + ", " + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">" + (Math.Abs((decimal)vResult.DIFERENCIA)).ToString() + "% &nbsp;<img src='../Assets/images/Icons/25/Arrow" + vIcono + ".png' /></p>";
                            }
                            else
                            {
                                vDr["T" + vColumn.ID_PERIODO_REFERENCIA.ToString()] = "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">N/A</p>";
                            }
                        }

                        if (vColumn.CL_TIPO_PERIODO_REFERENCIA == "EO_CLIMA")
                        {
                            var vResult = vLstClimaLaboral.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PERIODO == vColumn.ID_PERIODO_REFERENCIA).FirstOrDefault();
                            if (vResult != null)
                            {
                                if (vResult.PROMEDIO_RESULTADO != null)
                                {
                                    vPorcentajeCL = vPorcentajeCL + vResult.PROMEDIO_RESULTADO;
                                    vNumPeriodoCL = vNumPeriodoCL + 1;
                                    vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\"><a href=\"javascript:openCuestionarioClima(" + vResult.ID_EVALUADOR + ", " + vResult.ID_PERIODO + ")\">" + vResult.PROMEDIO_RESULTADO.ToString() + "%</a></p>", vResult.COLOR_DIMENSION);
                                }
                                else
                                {
                                    vPorcentajeCL = vPorcentajeCL + ((vResult.PROMEDIO_RESULTADO == null) ? 0 : vResult.PROMEDIO_RESULTADO);
                                    vNumPeriodoCL = vNumPeriodoCL + 1;
                                    vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\"><a href=\"javascript:openCuestionarioClima(" + vResult.ID_EVALUADOR + ", " + vResult.ID_PERIODO + ")\">0%</a></p>", vResult.COLOR_DIMENSION);
                                }
                            }
                            else
                            {
                                vDr[vColumn.ID_PERIODO_REFERENCIA.ToString()] = String.Format(vDivsCeldasPo, "<p title=\"" + item.CL_PUESTO + ", " + item.NB_PUESTO + "\">N/A</p>", "divNa");
                            }
                        }
                    }

                    if (vPeriodoTablero.FG_EVALUACION_FYD == true)
                    {
                        var vResult = vLstResultFyD.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PUESTO == item.ID_PUESTO_PERIODO).FirstOrDefault();
                        if (vResult != null)
                        {
                            vDr["TENDENCIA_FYD"] = String.Format(vDivsCeldasPo, vResult.FYD_TENDENCIA, vResult.CL_COLOR_TENDENCIA);
                        }
                        else
                        {
                            vDr["TENDENCIA_FYD"] = String.Format(vDivsCeldasPo, "N/A", "divNa");
                        }
                    }

                    if (vPeriodoTablero.FG_EVALUACION_DESEMPEÑO == true)
                    {
                        var vResult = vLstResultEd.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PUESTO_PERIODO == item.ID_PUESTO_PERIODO).FirstOrDefault();
                        if (vResult != null)
                        {
                            vDr["TENDENCIA_ED"] = String.Format(vDivsCeldasPo, vResult.ED_TENDENCIA, vResult.CL_COLOR_TENDENCIA);
                        }
                        else
                        {
                            vDr["TENDENCIA_ED"] = String.Format(vDivsCeldasPo, "N/A", "divNa");
                        }
                    }

                    if (vPeriodoTablero.FG_EVALUACION_DESEMPEÑO == true)
                    {
                        var vBono = vLstResultEd.Where(t => t.ID_EMPLEADO == item.ID_EMPLEADO && t.ID_PUESTO_PERIODO == item.ID_PUESTO_PERIODO).FirstOrDefault();
                        if (vBono != null)
                        {
                            vDr["BONO"] = "$" + vBono.MN_BONO.ToString();
                        }
                        else
                        {
                            vDr["BONO"] = "N/A";
                        }
                    }

                    //// Se hace proceso de calculo de porcentajes por modulo del tablero

                    if (vNumPeriodoFyD > 0)
                    {
                        vPromedio = ((vPromedio == null) ? 0 : vPromedio) + ((vPorcentajeFYD / vNumPeriodoFyD) * (vPeriodoTablero.PR_FYD / 100));
                    }
                    if (vNumPeriodoED > 0)
                    {
                        vPromedio = vPromedio + ((vPorcentajeED / vNumPeriodoED) * (vPeriodoTablero.PR_DESEMPENO / 100));
                    }
                    if (vNumPeriodoCL > 0)
                    {
                        vPromedio = vPromedio + ((vPorcentajeCL / vNumPeriodoCL) * (vPeriodoTablero.PR_CLIMA_LABORAL / 100));
                    }

                    vDivsCeldaPromedio = ObtenerColorPromedio(vPromedio);
                    if (vPromedio != null)
                    {
                        vPromedioTotal = (double)vPromedio;
                    }
                    vDr["PROMEDIO"] = String.Format(vDivsCeldasPo, Math.Round(vPromedioTotal, 2).ToString() + "%", vDivsCeldaPromedio);
                }
                vDtPivot.Rows.Add(vDr);
            }

            return(vDtPivot);
        }