private void ObtenerDatosAccion()
    {
        if (nIdAccion == -1)
        {
        }
        else
        {
            ACCION_PT o = ACCION_PT.Select(tr, nIdAccion);
            txtIdAccion.Text    = o.t410_idaccion.ToString();
            txtDesAccion.Text   = o.t410_desaccion;
            txtDescripcion.Text = o.t410_desaccionlong;
            if (o.t410_flimite.Year > 1900)
            {
                txtValLim.Text = o.t410_flimite.ToShortDateString();
            }
            //Obtengo la mayor de las fechas de vigencia de sus tareas
            if (o.t410_ffin.Year > 1900)
            {
                txtValFin.Text = o.t410_ffin.ToShortDateString();
            }
            this.cboAvance.SelectedValue = o.t410_avance.ToString();
            this.cboAvance.Text          = o.t410_avance.ToString();

            this.txtDpto.Text   = o.t410_dpto;
            this.txtAlerta.Text = o.t410_alerta;
            this.txtObs.Text    = o.t410_obs;
        }
    }
    private string obtenerAcciones(string sIdAsunto, string sOrden, string sAscDesc)
    {
        StringBuilder sB = new StringBuilder();
        int           nIdAsunto;
        string        sIdAccion, sFecha, sIdResponsable;

        if (sIdAsunto == "")
        {
            return("error@#@Se ha intentado recoger las acciones de un asunto sin código");
        }
        nIdAsunto = int.Parse(sIdAsunto);
        sB.Append("<table id='tblDatos2' class='texto MA' style='width:600px; text-align:left;'>");
        sB.Append("<colgroup><col style='width:380px;' /><col style='width:65px;' /><col style='width:70px;' /><col style='width:85px;' /></colgroup>");
        //sB.Append("<tbody>");
        //sDesAsunto = HttpUtility.HtmlEncode(sDesAsunto);
        SqlDataReader dr = ACCION_PT.Catalogo(null, nIdAsunto, null, "", null, null, null, byte.Parse(sOrden), byte.Parse(sAscDesc));

        while (dr.Read())
        {
            sIdAccion      = dr["t410_idaccion"].ToString();
            sIdResponsable = dr["t409_responsable"].ToString();
            sB.Append("<tr id='" + sIdAccion + "' style='height:16px;' onclick='ms(this);' ondblclick='mDetAccion(this.id," + sIdAsunto + "," + sIdResponsable + ")' onmouseover='TTip(event)'>");
            sB.Append("<td style='padding-left:3px;'><nobr class='NBR' style='width:370px;'>" + HttpUtility.HtmlEncode(dr["t410_desaccion"].ToString()) + "</nobr></td>");
            sFecha = dr["t410_flimite"].ToString();
            if (sFecha != "")
            {
                sFecha = DateTime.Parse(dr["t410_flimite"].ToString()).ToShortDateString();
            }
            sB.Append("<td>" + sFecha + "</td>");

            sB.Append("<td style='text-align:right; padding-right:10px;'>" + dr["t410_avance"].ToString() + "</td>");
            sFecha = dr["t410_ffin"].ToString();
            if (sFecha != "")
            {
                sFecha = DateTime.Parse(dr["t410_ffin"].ToString()).ToShortDateString();
            }
            sB.Append("<td>" + sFecha + "</td></tr>");
        }
        dr.Close();
        dr.Dispose();
        //sB.Append("</tbody>");
        sB.Append("</table>");
        strTablaHtmlAccion = sB.ToString();
        return("OK@#@" + strTablaHtmlAccion);
    }
    private string borrarAccion(string sIdAccion)
    {
        string sResul;

        try
        {
            if (sIdAccion != "")
            {
                ACCION_PT.Delete(tr, int.Parse(sIdAccion));
            }
            sResul = "OK@#@" + sIdAccion;
        }
        catch (Exception e)
        {
            sResul = "error@#@" + e.Message;
        }
        return(sResul);
    }
    protected string Grabar(string strDatosTarea, string slIntegrantes, string sTareas)
    {
        string   sResul = "", sAccionBD, sIdRecurso, sCad, sTipoLinea, sCodTarea, oRec, sIdResponsable;
        int      iCodAccion, iCodAsunto;
        byte     iAvance;
        DateTime?dFfp = null;
        DateTime?dFLi = null;
        bool     bNotificable = false, bEnviarAlerta = false, bAlta = false;

        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccionSerializable(oConn);
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }
        try
        {
            #region Datos accion
            string[] aDatosTarea = Regex.Split(strDatosTarea, "##");
            // 0 -> id accion (si -1 es un alta)
            // 1 -> avance
            // 2 -> descripcion corta
            // 3 -> descripcion larga
            // 4 -> departamento
            // 5 -> f/fin
            // 6 -> f/limite
            // 7 -> alerta
            // 8 -> observaciones
            // 9 -> asunto
            // 10 -> des asunto
            // 11 -> num PE
            // 12 -> des PE
            // 13 -> enviar alerta (S/N)
            // 14 -> Id responsable del asunto
            // 15 -> num PT
            // 16 -> des PT
            //if (aDatosTarea[13] == "S") bEnviarAlerta = true;
            bEnviarAlerta = true;
            if (aDatosTarea[0] == "")
            {
                iCodAccion = -1;
            }
            else
            {
                iCodAccion = int.Parse(aDatosTarea[0]);
            }
            iCodAsunto = int.Parse(aDatosTarea[9]);
            if (aDatosTarea[1] == "")
            {
                iAvance = 0;
            }
            else
            {
                iAvance = byte.Parse(aDatosTarea[1]);
            }
            if (aDatosTarea[5] != "")
            {
                dFfp = DateTime.Parse(aDatosTarea[5]);
            }
            if (aDatosTarea[6] != "")
            {
                dFLi = DateTime.Parse(aDatosTarea[6]);
            }

            if (iCodAccion == -1)
            {
                bAlta = true;
            }
            if (bAlta)
            {
                DateTime dtNow = System.DateTime.Now;
                iCodAccion = ACCION_PT.Insert(tr, dtNow, iCodAsunto, Utilidades.unescape(aDatosTarea[7]),
                                              iAvance, Utilidades.unescape(aDatosTarea[2]),
                                              Utilidades.unescape(aDatosTarea[3]),
                                              Utilidades.unescape(aDatosTarea[4]),
                                              dFfp, dFLi, Utilidades.unescape(aDatosTarea[8]));
            }
            else
            {
                ACCION_PT.Update(tr, Utilidades.unescape(aDatosTarea[7]),
                                 iAvance,
                                 Utilidades.unescape(aDatosTarea[2]),
                                 Utilidades.unescape(aDatosTarea[3]),
                                 Utilidades.unescape(aDatosTarea[4]),
                                 dFfp, dFLi, iCodAccion,
                                 Utilidades.unescape(aDatosTarea[8]));
            }
            #endregion
            #region Datos integrantes
            //OfiTec.BorrarIntegrantes(iCodCR);
            if (slIntegrantes == "")
            {//Tenemos lista vacía. No hacemos nada
            }
            else
            {//Con la cadena generamos una lista y la recorremos para grabar cada elemento
                string[] aPersonas = Regex.Split(slIntegrantes, @"///");

                for (int i = 0; i < aPersonas.Length - 1; i++)
                {
                    if (aPersonas[i] != "")
                    {
                        string[] aIntegrante = Regex.Split(aPersonas[i], @"##");
                        sAccionBD  = aIntegrante[0];
                        sIdRecurso = aIntegrante[1];
                        if (aIntegrante[2] == "1")
                        {
                            bNotificable = true;
                        }
                        else
                        {
                            bNotificable = false;
                        }

                        oRec  = iCodAccion.ToString() + "##" + sIdRecurso + "##";
                        oRec += Utilidades.unescape(aDatosTarea[2]) + "##";                           //descripcion corta
                        oRec += aDatosTarea[11] + "##" + Utilidades.unescape(aDatosTarea[12]) + "##"; //cod y des PE
                        oRec += aDatosTarea[9] + "##" + Utilidades.unescape(aDatosTarea[10]) + "##";  //cod y des Asunto
                        oRec += dFLi.ToString() + "##" + dFfp.ToString() + "##";

                        switch (sAccionBD)
                        {
                        case "I":
                            ACCIONRECURSOS_PT.Insert(tr, int.Parse(sIdRecurso), iCodAccion, bNotificable);
                            //if (bNotificable) EnviarCorreoRecurso("I", oRec);
                            break;

                        case "D":
                            //delete
                            ACCIONRECURSOS_PT.Delete(tr, iCodAccion, int.Parse(sIdRecurso));
                            //if (bNotificable) EnviarCorreoRecurso("D", oRec);
                            break;

                        case "U":
                            //update
                            ACCIONRECURSOS_PT.Update(tr, int.Parse(sIdRecurso), iCodAccion, bNotificable);
                            //if (bNotificable) EnviarCorreoRecurso("U", oRec);
                            break;
                        }
                    }
                }//for
            }
            #endregion
            #region tareas
            //Grabamos las tareas asociadas a la acción
            if (sTareas != "")
            {
                string[] aTareas = Regex.Split(sTareas, @"##");

                for (int i = 0; i < aTareas.Length - 1; i++)
                {
                    sCad       = aTareas[i];
                    sTipoLinea = sCad.Substring(0, 1);
                    sCodTarea  = quitaPuntos(sCad.Substring(1));
                    if (sTipoLinea == "D")
                    {//Borrar accion-tarea
                        ACCIONTAREAS_PT.Delete(tr, iCodAccion, int.Parse(sCodTarea));
                    }
                    else
                    {
                        if (sTipoLinea == "I")
                        {//Insertar accion-tarea
                            ACCIONTAREAS_PT.Insert(tr, int.Parse(sCodTarea), iCodAccion);
                        }
                    }
                }
            }
            #endregion
            #region Enviar correos
            if (bEnviarAlerta)
            {
                oRec  = iCodAccion.ToString() + "##";
                oRec += Utilidades.unescape(aDatosTarea[2]) + "##";                           //descripcion corta
                oRec += aDatosTarea[11] + "##" + Utilidades.unescape(aDatosTarea[12]) + "##"; //cod y des PE
                oRec += aDatosTarea[9] + "##" + Utilidades.unescape(aDatosTarea[10]) + "##";  //cod y des Asunto
                oRec += dFLi.ToString() + "##" + dFfp.ToString() + "##";
                oRec += aDatosTarea[1] + "##";                                                //avance
                oRec += Utilidades.unescape(aDatosTarea[3]) + "##";                           //descripcion larga accion
                oRec += Utilidades.unescape(aDatosTarea[8]) + "##";                           //observaciones
                oRec += Utilidades.unescape(aDatosTarea[4]) + "##";                           //Dpto
                oRec += aDatosTarea[15] + "##" + Utilidades.unescape(aDatosTarea[16]) + "##"; //cod y des PT
                if (bAlta)
                {
                    sCad = "I";
                }
                else
                {
                    sCad = "U";
                }
                sIdResponsable = aDatosTarea[14];
                EnviarCorreoAlerta(sCad, oRec, Utilidades.unescape(aDatosTarea[7]), slIntegrantes, sIdResponsable, bAlta);
            }
            #endregion
            Conexion.CommitTransaccion(tr);
            sResul = "OK@#@" + iCodAccion.ToString();
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al grabar los datos de la acción", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
        private void listaTareas(int iNumPT)
        {
            StringBuilder strBuilder = new StringBuilder();
            double        fAvance, fETPL, fETPR, fConsumo;
            string        sCad, sFecha;

            strBuilder.Append("<table id='tblDatos' class='texto MA' style='width: 400px;'>");
            strBuilder.Append("<colgroup><col style='width:60px' /><col style='width:340px;' /></colgroup>");
            strBuilder.Append("<tbody>");
            SqlDataReader dr = ACCION_PT.CatalogoTareasPT(iNumPT);

            while (dr.Read())
            {
                #region Genera el texto del tooltip extendido
                StringBuilder sbTitle = new StringBuilder();
                sbTitle.Append("<b>Proy. Eco.</b>: ");
                sbTitle.Append(dr["nom_proyecto"].ToString().Replace((char)34, (char)39));
                sbTitle.Append("<br><b>Proy. Téc.</b>: ");
                sbTitle.Append(dr["t331_despt"].ToString().Replace((char)34, (char)39));
                if (dr["t334_desfase"].ToString() != "")
                {
                    sbTitle.Append("<br><b>Fase</b>:          ");
                    sbTitle.Append(dr["t334_desfase"].ToString().Replace((char)34, (char)39));
                }
                if (dr["t335_desactividad"].ToString() != "")
                {
                    sbTitle.Append("<br><b>Actividad</b>:  ");
                    sbTitle.Append(dr["t335_desactividad"].ToString().Replace((char)34, (char)39));
                }
                sbTitle.Append("<br><b>Tarea</b>:  ");
                sbTitle.Append(dr["desTarea"].ToString().Replace((char)34, (char)39));
                #endregion
                #region Genero la fila
                strBuilder.Append("<tr id='" + dr["codTarea"].ToString() + "' onclick='mm(event)' ondblclick='aceptar()' style='height:16px;' onmouseover='TTip(event);'");
                strBuilder.Append(" title=\"cssbody=[dvbdy] cssheader=[dvhdr] header=[<img src='../../../images/info.gif' style='vertical-align:middle'>  Estructura] body=[");
                strBuilder.Append(sbTitle);
                strBuilder.Append("]\"");
                sCad = dr["ETPL"].ToString();
                if (sCad == "")
                {
                    fETPL = 0;
                }
                else
                {
                    fETPL = double.Parse(sCad);
                }
                strBuilder.Append(" ETPL='" + fETPL.ToString("N") + "'");

                sCad = dr["FIPL"].ToString();
                if (sCad != "")
                {
                    sFecha = DateTime.Parse(sCad).ToShortDateString();
                    //if (sFecha == "01/01/1900") sFecha = "";
                }
                else
                {
                    sFecha = "";
                }
                strBuilder.Append(" FIPL='" + sFecha + "'");

                sCad = dr["FFPL"].ToString();
                if (sCad != "")
                {
                    sFecha = DateTime.Parse(sCad).ToShortDateString();
                    //if (sFecha == "01/01/1900") sFecha = "";
                }
                else
                {
                    sFecha = "";
                }
                strBuilder.Append(" FFPL='" + sFecha + "'");

                sCad = dr["ETPR"].ToString();
                if (sCad == "")
                {
                    fETPR = 0;
                }
                else
                {
                    fETPR = double.Parse(sCad);
                }
                strBuilder.Append(" ETPR='" + fETPR.ToString("N") + "'");

                sCad = dr["FFPR"].ToString();
                if (sCad != "")
                {
                    sFecha = DateTime.Parse(sCad).ToShortDateString();
                    //if (sFecha == "01/01/1900") sFecha = "";
                }
                else
                {
                    sFecha = "";
                }
                strBuilder.Append(" FFPR='" + sFecha + "'");

                sCad = dr["Consumo"].ToString();
                if (sCad == "")
                {
                    fConsumo = 0;
                }
                else
                {
                    fConsumo = double.Parse(sCad);
                }
                strBuilder.Append(" CONSUMO='" + fConsumo.ToString("N") + "'");

                if (fConsumo == 0)
                {
                    fAvance = 0;
                }
                else
                {
                    fAvance = (fETPR * 100) / fConsumo;
                }
                strBuilder.Append(" AVANCE='" + fAvance.ToString("N") + "'");
                strBuilder.Append(">");
                #endregion
                strBuilder.Append("<td style='text-align:right'>");
                strBuilder.Append(int.Parse(dr["codTarea"].ToString()).ToString("#,###"));
                strBuilder.Append("</td><td style='padding-left:5px;'><nobr class='NBR'>");
                strBuilder.Append(dr["desTarea"].ToString());
                strBuilder.Append("</nobr></td>");
            }
            dr.Close();
            dr.Dispose();
            strBuilder.Append("</tbody>");
            strBuilder.Append("</table>");
            strTablaHtml = strBuilder.ToString();
        }