private string PonerRecurso(bool bSoloAsignadas, bool bSoloActivas, int iRecursoOrigen, string sTipoItem, int IdRecurso, int IdItem,
                                string sHaciaProy, int IdNodo, int iUltCierreEco, int IdPsn, bool bNotifProf)
    {
        SqlConnection  oConn = null;
        SqlTransaction tr = null;
        string         sResul = "";
        bool           bAdmiteRecursoPST, bRecursoAsignado = false;

        try
        {
            if (sHaciaProy == "S")
            {
                bAdmiteRecursoPST = true;
            }
            else
            {
                bAdmiteRecursoPST = false;
            }
            //Abro transaccion
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);

            switch (sTipoItem)
            {
            case "E":
                PROYECTOSUBNODO.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null,
                                                         -1, "", false, bAdmiteRecursoPST, IdNodo, iUltCierreEco);
                break;

            case "P":
                ProyTec.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null, -1, "", false, bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                break;

            case "F":
                FASEPSP.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null, -1, "", false, bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                break;

            case "A":
                ACTIVIDADPSP.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null, -1, "", false, bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                break;

            case "T":
                //iNumAsig = TareaRecurso.InsertarSNE(tr, IdItem, IdRecurso, null, null, null, null, null, null, 1, null, "", false);
                bRecursoAsignado = TareaRecurso.InsertarTEC(tr, IdItem, IdRecurso, null, null, null, null, null, null, 1, null, "", false,
                                                            bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                if (bNotifProf && bRecursoAsignado)    //se notifica a profesionales y no estaba ya asignado a la tarea
                {
                    TAREAPSP oTar  = TAREAPSP.Obtener(null, IdItem);
                    TAREAPSP oTar2 = TAREAPSP.ObtenerOTC(null, IdItem);
                    string   oRec  = "##" + IdItem.ToString() + "##" + IdRecurso.ToString() + "################";
                    oRec += Utilidades.escape(oTar.t332_destarea) + "##";
                    oRec += oTar.num_proyecto.ToString() + "##" + Utilidades.escape(oTar.nom_proyecto) + "##";
                    oRec += Utilidades.escape(oTar.t331_despt) + "##" + Utilidades.escape(oTar.t334_desfase) + "##" + Utilidades.escape(oTar.t335_desactividad) + "##";
                    oRec += Utilidades.escape(oTar2.t346_codpst) + "##" + Utilidades.escape(oTar2.t346_despst) + "##";
                    oRec += Utilidades.escape(oTar.t332_otl) + "##" + Utilidades.escape(oTar.t332_incidencia) + "##";

                    TareaRecurso.EnviarCorreoRecurso(tr, "I", oRec, "", "", "", "", Utilidades.escape(oTar.t332_mensaje));
                }
                break;
            }
            //if (sHaciaProy == "S")
            //{
            //    if (!TareaRecurso.AsociadoAProyecto(tr, IdPsn, IdRecurso))
            //    {//lA FECHA DE alta en el proyecto será la siguiente al último mes cerrado del nodo
            //        DateTime dtFechaAlta = Fechas.AnnomesAFecha(Fechas.AddAnnomes(iUltCierreEco, 1));
            //        TareaRecurso.AsociarAProyecto(tr, IdNodo, IdRecurso, IdPsn, null, dtFechaAlta, null);
            //    }
            //    else
            //        TareaRecurso.ReAsociarAProyecto(tr, IdRecurso, IdPsn);
            //}
            Conexion.CommitTransaccion(tr);
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = Errores.mostrarError("Error al grabar", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }