private string Grabar(string sTarea, string sRecurso, string strIndicaciones)
 {
     try
     {
         TareaRecurso.ModificarIndicaciones(null, int.Parse(sTarea), int.Parse(sRecurso), Utilidades.unescape(strIndicaciones));
         return("OK");
     }
     catch (Exception ex)
     {
         return("Error@#@" + Errores.mostrarError("Error al grabar las indicaciones", ex));
     }
 }
    private string PonerRecurso(string sTipoItem, int IdRecurso, int nIdTarea, bool bNotifProf)
    {
        SqlConnection  oConn  = null;
        SqlTransaction tr     = null;
        string         sResul = "";

        //bool bAdmiteRecursoPST = true, bRecursoAsignado = false;
        try
        {
            //Abro transaccion
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);

            //bRecursoAsignado = TareaRecurso.InsertarTEC(tr, nIdTarea, IdRecurso, null, null, null, null, null, null, 1, null, "", false,
            //                                            bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
            int iRes = TareaRecurso.InsertarSNE(tr, nIdTarea, IdRecurso, null, null, null, null, null, null, 1, "", "", false);

            if (bNotifProf && iRes != 0)//se notifica a profesionales y no estaba ya asignado a la tarea
            {
                TAREAPSP oTar  = TAREAPSP.Obtener(null, nIdTarea);
                TAREAPSP oTar2 = TAREAPSP.ObtenerOTC(null, nIdTarea);
                string   oRec  = "##" + nIdTarea.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));
            }
            Conexion.CommitTransaccion(tr);
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = Errores.mostrarError("Error al grabar", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
    private string ObtenerRecursos(string sIdTarea, string sCodUne)
    {// Devuelve el código HTML del catalogo de recursos asociados a la tarea
        StringBuilder sb = new StringBuilder();
        SqlDataReader dr;

        try
        {
            sb.Append("<div style='background-image:url(../../../../Images/imgFT20.gif); width:460px'>");
            sb.Append("<table id='tblOpciones3' class='texto' style='width: 460px;' mantenimiento='0'>");
            sb.Append("<colgroup><col style='width:20px'/><col style='width:425px'/><col style='width:15px'/></colgroup>");//style='padding-left:5px'
            sb.Append("<tbody>");
            if (sIdTarea != "")
            {
                dr = TareaRecurso.Catalogo(int.Parse(sIdTarea), false);
                while (dr.Read())
                {
                    if (dr["t336_estado"].ToString() == "1")
                    {//Solo muestro los activos en la tarea
                        sb.Append("<tr style='height:20px' bd='' id='" + dr["t314_idusuario"].ToString() + "' ");
                        sb.Append("estado='" + dr["t336_estado"].ToString() + "' ");
                        sb.Append("sexo='" + dr["t001_sexo"].ToString() + "' ");
                        sb.Append("baja='" + dr["baja"].ToString() + "' ");
                        sb.Append("tipo='" + dr["tipo"].ToString() + "' ");
                        //if (dr["t303_idnodo"].ToString() == "") sb.Append("tipo='E' ");
                        //else if (dr["t303_idnodo"].ToString() == sCodUne) sb.Append("tipo='P' ");
                        //else sb.Append("tipo='N' ");
                        sb.Append("><td></td><td><nobr class='NBR W410'>" + dr["empleado"].ToString() + "</nobr></td>");
                        sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' checked='true'></td>");
                        sb.Append("</tr>");
                    }
                }
                sb.Append("</tbody>");
                sb.Append("</table></div>");
                dr.Close(); dr.Dispose();
            }
            return("OK@#@" + sb.ToString());
        }
        catch (Exception ex)
        {
            return("Error@#@" + Errores.mostrarError("Error al obtener las personas ", ex));
        }
    }
Beispiel #4
0
        public string bTieneconsumos(int nTarea, int nUsuario)
        {
            string strReturn = "0";

            try
            {
                bool bConsumos = TareaRecurso.ExistenConsumos(null, nTarea, nUsuario);
                if (bConsumos)
                {
                    strReturn = "1";
                }
            }
            catch (Exception)
            {
                //string s = ex.Message;
                strReturn = "Error";
            }

            return(strReturn);
        }
Beispiel #5
0
    private string PonerRecurso(int IdRecurso, int IdNodo, int iUltCierreEco, int IdPsn,
                                bool bDeriva, decimal costecon, decimal costerep, bool bNotif)
    {
        SqlConnection  oConn  = null;
        SqlTransaction tr     = null;
        string         sResul = "";

        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);
            //lA FECHA DE alta en el proyecto será la siguiente al último mes cerrado del nodo
            DateTime dtFechaAlta = Fechas.AnnomesAFecha(Fechas.AddAnnomes(iUltCierreEco, 1));
            if (!TareaRecurso.AsociadoAProyecto(tr, IdPsn, IdRecurso))
            {
                //TareaRecurso.AsociarAProyecto(tr, IdNodo, IdRecurso, IdPsn, null, dtFechaAlta, null);
                //if (costecon == null) costecon = 0;
                USUARIOPROYECTOSUBNODO.Insert(tr, IdPsn, IdRecurso, costecon, costerep, bDeriva, dtFechaAlta, null, null);
            }
            else
            {
                //TareaRecurso.ReAsociarAProyecto(tr, IdRecurso, IdPsn);
                if (!USUARIOPROYECTOSUBNODO.AsociadoDeAltaProyecto(tr, IdPsn, IdRecurso))
                {
                    USUARIOPROYECTOSUBNODO.Update(tr, IdPsn, IdRecurso, costecon, costerep, bDeriva, dtFechaAlta, null, null);
                }
            }
            Conexion.CommitTransaccion(tr);
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = Errores.mostrarError("Error al grabar", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
    private void Page_Load(object sender, System.EventArgs e)
    {
        if (!Page.IsCallback)
        {
            try
            {
                if (Session["IDRED"] == null)
                {
                    try
                    {
                        Response.Redirect("~/SesionCaducadaModal.aspx", true);
                    }
                    catch (System.Threading.ThreadAbortException) { return; }
                }

                nTarea   = int.Parse(Request.QueryString["nTarea"].ToString());
                nRecurso = int.Parse(Request.QueryString["nRecurso"].ToString());

                TareaRecurso oTR = TareaRecurso.Obtener(nTarea, nRecurso);
                txtIndicaciones.Text  = oTR.sIndicaciones;
                txtObservaciones.Text = oTR.sComentario;
            }
            catch (Exception ex)
            {
                sErrores = Errores.mostrarError("Error al obtener los datos", ex);
            }

            //1º Se indican (por este orden) la función a la que se va a devolver el resultado
            //   y la función que va a acceder al servidor
            string cbRespuesta = Page.ClientScript.GetCallbackEventReference(this, "arg", "RespuestaCallBack", "context", false);
            string cbLlamada   = "function RealizarCallBack(arg, context)" + "{" + cbRespuesta + ";" + "}";

            //2º Se "registra" la función que va a acceder al servidor.
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "RealizarCallBack", cbLlamada, true);
        }
    }
    //private string ObtenerDocumentos(string sIdTarea)
    //{
    //    StringBuilder sb = new StringBuilder();
    //    bool bModificable;
    //    SqlDataReader dr = DOCUT.Catalogo(null, int.Parse(sIdTarea), "", "", "", null, null, null, true, null, 3, 0);

    //    sb.Append("<div style='background-image:url(../../../Images/imgFT20.gif); width:0%; height:0%'>");
    //    sb.Append("<table id='tblDocumentos' class='texto' style='WIDTH: 800px; BORDER-COLLAPSE: collapse; ' cellSpacing='0' border='0'>");
    //    sb.Append("<colgroup><col style='width:265px;padding-left:5px;' /><col width='215px' /><col width='225px' /><col width='100px' /></colgroup>");
    //    sb.Append("<tbody>");
    //    while (dr.Read())
    //    {   //Si el archivo NO es sólo lectura, o si el usuario es el autor del archivo, o es administrador, se permite modificar.
    //        if ((dr["t314_idusuario_autor"].ToString() == Session["NUM_EMPLEADO_ENTRADA"].ToString() || Session["ADMINISTRADOR_PC_ACTUAL"].ToString() == "A")
    //            || (!(bool)dr["t363_privado"] && !(bool)dr["t363_modolectura"]))
    //            bModificable = true;
    //        else
    //            bModificable = false;

    //        sb.Append("<tr id='" + dr["t363_iddocut"].ToString() + "' onclick='mmse(this);' sTipo='T' sAutor='" + dr["t314_idusuario_autor"].ToString() + "' onmouseover='TTip()' style='height:20px;'>");

    //        //Si el archivo NO es sólo lectura, o si el usuario es el autor del archivo, o es administrador, se permite modificar.
    //        if (bModificable)
    //            sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id, 'IAP')\"><nobr class='NBR' style='width:255px'>" + dr["t363_descripcion"].ToString() + "</nobr></td>");
    //        else
    //            sb.Append("<td class='MANO'><nobr class='NBR' style='width:255px'>" + dr["t363_descripcion"].ToString() + "</nobr></td>");

    //        if (dr["t363_nombrearchivo"].ToString() == "")
    //        {
    //            if (bModificable)
    //                sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\"></td>");
    //            else
    //                sb.Append("<td class='MANO'></td>");
    //        }
    //        else
    //        {
    //            string sNomArchivo = dr["t363_nombrearchivo"].ToString() + Utilidades.TamanoArchivo((int)dr["bytes"]);
    //            //Si el archivo no es privado, o es privado y la persona que entra es el autor, o es administrador, se permite descargar.
    //            if ((!(bool)dr["t363_privado"]) || ((bool)dr["t363_privado"] && dr["t314_idusuario_autor"].ToString() == Session["NUM_EMPLEADO_ENTRADA"].ToString()) || Session["ADMINISTRADOR_PC_ACTUAL"].ToString() == "A")
    //                sb.Append("<td><img src=\"../../../images/imgDescarga.gif\" width='16px' height='16px' onclick=\"descargar(this.parentNode.parentNode.getAttribute('sTipo'), this.parentNode.parentNode.id);\" style='vertical-align:bottom;' title=\"Descargar " + sNomArchivo + "\">");
    //            else
    //                sb.Append("<td><img src=\"../../../images/imgSeparador.gif\" width='16px' height='16px' style='vertical-align:bottom;'>");
    //            if (bModificable)
    //                sb.Append("&nbsp;<nobr class='NBR MA' style='width:205px;' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\">" + sNomArchivo + "</nobr></td>");
    //            else
    //                sb.Append("&nbsp;<nobr class='NBR MANO' style='width:205px;'>" + sNomArchivo + "</nobr></td>");
    //        }

    //        if (dr["t363_weblink"].ToString() == "")
    //        {
    //            if (bModificable)
    //                sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\"></td>");
    //            else
    //                sb.Append("<td class='MANO'></td>");
    //        }
    //        else
    //        {
    //            string sHTTP = "";
    //            if (dr["t363_weblink"].ToString().IndexOf("http") == -1) sHTTP = "http://";
    //            sb.Append("<td><a href='" + sHTTP + dr["t363_weblink"].ToString() + "'><nobr class='NBR' style='width:215px'>" + dr["t363_weblink"].ToString() + "</nobr></a></td>");
    //        }
    //        if (bModificable)
    //            sb.Append("<td class='MA' ondblclick=\"modificarDoc(this.parentNode.getAttribute('sTipo'), this.parentNode.id)\"><nobr class='NBR' style='width:140px;'>" + dr["autor"].ToString() + "</nobr></td></tr>");
    //        else
    //            sb.Append("<td class='MANO'><nobr class='NBR' style='width:140px;'>" + dr["autor"].ToString() + "</nobr></td></tr>");
    //    }
    //    dr.Close();
    //    dr.Dispose();
    //    sb.Append("</tbody>");
    //    sb.Append("</table>");
    //    sb.Append("</div>");

    //    return "OK@#@" + sb.ToString();
    //}

    protected string Grabar(string strDatos)
    {
        string sResul = "";

        aListCorreo = new ArrayList();

        #region Abrir conexión y transacción
        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);
        }
        catch (Exception ex)
        {
            if (oConn.State == ConnectionState.Open)
            {
                Conexion.Cerrar(oConn);
            }
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }
        #endregion

        try
        {
            string[] aValores = Regex.Split(strDatos, "##");
            ///aValores[0] = IdTarea
            ///aValores[1] = nETE
            ///aValores[2] = sFFE
            ///aValores[3] = sObservaciones
            ///aValores[4] = nFinalizado;
            ///aValores[5] = nFinalizadoAntes;
            ///aValores[6] = nPT;
            ///aValores[7] = Desc Tarea;
            ///aValores[8] = sNotas;
            ///aValores[9] = txtNotas1;
            ///aValores[10] = txtNotas2;
            ///aValores[11] = txtNotas3;
            ///aValores[12] = txtNotas4;
            ///aValores[13] = sComentarioOriginal;
            ///aValores[14] = nETEOriginal;
            ///aValores[15] = sFFEOriginal;

            double   nETE = 0;
            DateTime?sFFE = null;

            if (aValores[1] != "")
            {
                nETE = double.Parse(aValores[1]);
            }
            if (aValores[2] != "")
            {
                sFFE = DateTime.Parse(aValores[2]);
            }

            TareaRecurso.ActualizarEstimacion(tr, int.Parse(Session["NUM_EMPLEADO_IAP"].ToString()), int.Parse(aValores[0]), sFFE, nETE, Utilidades.unescape(aValores[3]), (aValores[4] == "1")?true:false);

            if (aValores[5] == "0" && aValores[4] == "1")
            {
                //Si antes la tarea no estaba finalizada y ahora sí,
                //Mail al (a los) RTPT indicando que se ha finalizado
                //y continuar con la grabación
//                TareaFinalizada(tr, int.Parse(aValores[0]), int.Parse(aValores[6]));
            }

            if (aValores[3] != aValores[13] || aValores[1] != aValores[14] || aValores[2] != aValores[15])
            {
                //Si se han modificado los comentarios del técnico al gerente
                //Mail al (a los) RTPT
//                EstimacionModificada(tr, int.Parse(aValores[0]), int.Parse(aValores[6]));
            }

            if (aValores[8] == "1")
            {
                TAREAPSP.ActualizarNotas(tr, int.Parse(aValores[0]), Utilidades.unescape(aValores[9]), Utilidades.unescape(aValores[10]), Utilidades.unescape(aValores[11]), Utilidades.unescape(aValores[12]));
            }

            Conexion.CommitTransaccion(tr);
            sResul = "OK@#@";
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al grabar los datos de la tarea", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }

        try
        {
            if (aListCorreo.Count > 0)
            {
                Correo.EnviarCorreos(aListCorreo);
            }
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al enviar el mail a los responsables técnicos de proyectos técnicos", ex);
        }

        return(sResul);
    }
    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);
    }
Beispiel #9
0
        /// <summary>
        /// Genera la estructura técnica de un proyecto en SUPER, sobre un proyecto ya existente
        /// Se borran los item que están en SUPER y no están en OpenProj (salvo que tengan consumos)
        /// Si el ítem es nuevo en OpenProj - > se inserta en SUPER
        /// Si el ítem tiene codigo (<Numero1></Numero1>) se updatea en SUPER
        /// </summary>
        private string Importar(bool bBorrarEstructura)
        {
            StringBuilder  sb = new StringBuilder();
            int            idPSN = -1, iMargen = 0, iCodUne = -1, iNumProy = -1, iPos, iAux;
            int            iPT = -1, iFase = -1, iActiv = -1, iTarea = -1, iHito = -1, iOrden = 1;
            string         sSituacion = "1", sAux, sTipo, sCodSuperItem = "", sNota = "", sAccion = "", sTaskUID = "", sCodTarea = "";//sMargen = "0",
            string         sFIPL = "", sFFPL = "", sFFPR = "", sWorkTarea = "", sListaTareas = "", sListaRecursos = "", sDenTarea = "", sCodUser = "";
            string         sMensError = "";
            bool           bFacturable, bHayQueUpdatear = false;//, bEsHito = false
            decimal        dETPL = 0, dETPR = 0;
            DateTime?      dtFIPL = null;
            DateTime?      dtFFPL = null;
            SqlConnection  oConn  = null;
            SqlTransaction tr     = null;

            sListaTareas   = this.hdnTareas.Value;
            sListaRecursos = this.hdnRecursos.Value;
            htTareas       = new Hashtable();

            #region Abro transaccion
            try
            {
                oConn = Conexion.Abrir();
                tr    = Conexion.AbrirTransaccion(oConn);
            }
            catch (Exception ex)
            {
                return("Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex));
            }
            #endregion
            idPSN = int.Parse(this.hdnPSN.Value);

            try
            {
                iCodUne = PROYECTOSUBNODO.GetNodo(tr, idPSN);
                if (bBorrarEstructura)
                {
                    if (PROYECTOSUBNODO.TieneConsumos(tr, idPSN))
                    {
                        Conexion.CerrarTransaccion(tr);
                        return("Error@#@El proyecto tiene consumos. No se puede eliminar la estructura actual.");
                    }
                    else
                    {
                        EstrProy.BorrarEstructura(tr, idPSN);
                    }
                }
                else
                {
                    //Vamos a meter lo que importamos debajo de lo que ya existe. Para ello obtenemos el mayor orden de los PT existentes
                    iOrden = ProyTec.GetMaxOrden(tr, idPSN) + 1;
                }
                bFacturable = PROYECTOSUBNODO.GetFacturable(tr, idPSN);

                #region Inserto y/o updateo los items del proyecto
                string[] aTareas = Regex.Split(sListaTareas, @"/#/");
                for (int i = 0; i < aTareas.Length - 1; i++)
                {
                    string[] aElem = Regex.Split(aTareas[i], @"#@#");
                    #region recojo datos del XML

                    /*
                     * aElem[0]: sTipo + "##";
                     * aElem[1]: UID + "##";
                     * aElem[2]: sMargen + "##";
                     * aElem[3]: DENOMINACION + "##";
                     * aElem[4]: ETPL + "##";
                     * aElem[5]: FIPL + "##";
                     * aElem[6]: FFPL + "##";
                     * aElem[7]: ETPR + "##";
                     * aElem[8]: FFPR + "##";
                     * aElem[9]: NOTAS + "##";
                     */
                    sTipo     = aElem[0];
                    sTaskUID  = aElem[1];
                    iMargen   = int.Parse(aElem[2]);
                    sDenTarea = aElem[3];
                    dETPL     = decimal.Parse(aElem[4]);
                    dETPR     = decimal.Parse(aElem[7]);
                    sFIPL     = aElem[5];
                    sFFPL     = aElem[6];
                    sFFPR     = aElem[8];
                    sNota     = aElem[9];
                    #endregion

                    #region Cálculo de códigos padre
                    switch (sTipo)
                    {
                    case "P":
                        iFase  = -1;
                        iActiv = -1;
                        break;

                    case "F":
                        iActiv = -1;
                        break;

                    case "A":
                        if (iMargen != 40)
                        {
                            iFase = -1;
                        }
                        break;

                    case "T":
                        if (iMargen == 40)
                        {
                            iFase = -1;
                        }
                        else
                        if (iMargen != 60)
                        {
                            iFase = -1; iActiv = -1;
                        }
                        break;
                        //case "HT":
                        //case "HF":
                        //case "HM":
                        //    iHito = int.Parse(aElem[7]);
                        //    if (sEstado == "D") sCadenaBorrado += sTipo + "@#@" + iHito.ToString() + @"##";//hito
                        //    break;
                    }
                    #endregion

                    #region Inserto o updateo el item de la estructura en BBDD
                    if (sCodSuperItem == "" || bBorrarEstructura)
                    {
                        sAccion = "I";
                    }
                    else
                    {
                        if (sCodSuperItem == "0.0" || sCodSuperItem == "0,0")
                        {
                            sAccion = "I";
                        }
                        else
                        {
                            sAccion = "U";
                            //El item esta en OpenProj -> marco en la hashtable para que no lo borre
                            #region obtención del código del elemento updateado
                            sAux = sCodSuperItem.Replace(",", ".");
                            iAux = int.Parse(sAux);
                            ItemsProyecto oItemAux = new ItemsProyecto();
                            switch (sTipo)
                            {
                            case "P":
                                iPT             = iAux;
                                oItemAux        = (ItemsProyecto)htPTs[iPT];
                                oItemAux.borrar = false;
                                htPTs[iPT]      = oItemAux;
                                break;

                            case "F":
                                iFase           = iAux;
                                oItemAux        = (ItemsProyecto)htFs[iFase];
                                oItemAux.borrar = false;
                                htFs[iFase]     = oItemAux;
                                break;

                            case "A":
                                iActiv          = iAux;
                                oItemAux        = (ItemsProyecto)htAs[iActiv];
                                oItemAux.borrar = false;
                                htAs[iActiv]    = oItemAux;
                                break;

                            case "T":
                                iTarea          = iAux;
                                oItemAux        = (ItemsProyecto)htItems[iTarea];
                                oItemAux.borrar = false;
                                htItems[iTarea] = oItemAux;
                                break;

                            case "HF":
                                iHito           = iAux;
                                oItemAux        = (ItemsProyecto)htHFs[iHito];
                                oItemAux.borrar = false;
                                htHFs[iHito]    = oItemAux;
                                break;
                            }
                            //if (sTipo.Substring(0, 1) == "H")
                            //{
                            //    AsociarTareasHitos(tr, iT305IdProy, iPT, iFase, iActiv, iTarea, iHito, iMargen);
                            //}
                            #endregion
                        }
                    }
                    if (sAccion == "I")
                    {
                        sAux = OpenProj.Insertar(tr, iCodUne, iNumProy, idPSN, sTipo, sDenTarea, iPT, iFase, iActiv, iMargen, iOrden,
                                                 sFIPL, sFFPL, dETPL, sFFPR, dETPR, Fechas.primerDiaMes(DateTime.Now).ToShortDateString(), "",
                                                 0, bFacturable, false, true, sSituacion, sNota, 0
                                                 );
                        #region obtención del código del elemento grabado
                        iPos = sAux.IndexOf("##");
                        iAux = int.Parse(sAux.Substring(0, iPos));
                        switch (sTipo)
                        {
                        case "P":
                            iPT = iAux;
                            break;

                        case "F":
                            iFase = iAux;
                            break;

                        case "A":
                            iActiv = iAux;
                            break;

                        case "T":
                            iTarea = iAux;
                            htTareas.Add(sTaskUID, iTarea.ToString());
                            break;
                            //case "HT":
                            //    iHito = iAux;
                            //    break;
                        }
                        //if (sTipo.Substring(0, 1) == "H")
                        //{
                        //    AsociarTareasHitos(tr, iT305IdProy, iPT, iFase, iActiv, iTarea, iHito, iMargen);
                        //}
                        #endregion
                    }
                    else
                    {//Hay que updatear el item (si hay algún cambio)
                        bHayQueUpdatear = false;

                        #region Mira si hay algún datos distinto para ver si hay que updatear el registro en la BBDD
                        ItemsProyecto oItem = new ItemsProyecto();
                        switch (sTipo)
                        {
                        case "T":
                            oItem = (ItemsProyecto)htItems[iTarea];
                            break;

                        case "P":
                            oItem = (ItemsProyecto)htPTs[iPT];
                            break;

                        case "F":
                            oItem = (ItemsProyecto)htFs[iFase];
                            break;

                        case "A":
                            oItem = (ItemsProyecto)htAs[iActiv];
                            break;

                        case "HF":
                            oItem = (ItemsProyecto)htHFs[iHito];
                            break;
                        }
                        if (oItem.nombre != sDenTarea)
                        {
                            bHayQueUpdatear = true;
                        }
                        else
                        {
                            if (oItem.descripcion != sNota)
                            {
                                bHayQueUpdatear = true;
                            }
                            else
                            {
                                if (sTipo == "T")
                                {
                                    if (oItem.PRIMER_CONSUMO.Substring(0, 10) != sFIPL)
                                    {
                                        bHayQueUpdatear = true;
                                    }
                                    else
                                    {
                                        if (oItem.FFPR.Substring(0, 10) != sFFPR)
                                        {
                                            bHayQueUpdatear = true;
                                        }
                                        else
                                        {
                                            if (oItem.ETPR != dETPR)
                                            {
                                                bHayQueUpdatear = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion

                        if (bHayQueUpdatear)
                        {
                            OpenProj.Modificar(tr, iCodUne, idPSN, sTipo, sDenTarea, iPT, iFase, iActiv, iTarea, iHito,
                                               iMargen, iOrden, sFIPL, sFFPL, dETPL, sNota);
                        }
                    }
                    iOrden++;
                    #endregion
                }
                #endregion

                #region Si hay recursos con nº empleado SUPER y con asignación a tarea, los meto
                bool     bAux      = false;
                string[] aRecursos = Regex.Split(sListaRecursos, @"/#/");
                for (int i = 0; i < aRecursos.Length - 1; i++)
                {
                    string[] aElem = Regex.Split(aRecursos[i], @"#@#");
                    //Recojo el código SUPER del recurso en la tarea
                    sTaskUID   = aElem[0];
                    sCodUser   = aElem[1];
                    sWorkTarea = aElem[2];
                    sFIPL      = aElem[3];
                    sFFPL      = aElem[4];
                    if (sFIPL != "")
                    {
                        dtFIPL = DateTime.Parse(sFIPL);
                    }
                    if (sFFPL != "")
                    {
                        dtFFPL = DateTime.Parse(sFFPL);
                    }
                    if (sCodUser != "")
                    {
                        sCodTarea = htTareas[sTaskUID].ToString();
                        if (sCodTarea != "" && sWorkTarea != "")
                        {
                            bAux = TareaRecurso.InsertarTEC(tr, int.Parse(sCodTarea), int.Parse(sCodUser), null, null,
                                                            double.Parse(sWorkTarea), dtFIPL, dtFFPL,
                                                            null, 1, "", "", true, true, idPSN, -1, -1);
                            if (!bAux)
                            {
                                sMensError += "Por restricciones del proyecto no es posible asignar el empleado " + sCodUser + " a la tarea " + sCodTarea + "\n";
                            }
                            TareaRecurso.UpdateEsfuerzo(tr, int.Parse(sCodTarea), int.Parse(sCodUser), null, double.Parse(sWorkTarea),
                                                        dtFIPL, dtFFPL, null, 1);
                        }
                    }
                }
                #endregion

                #region borro los items que estando en SUPER no están en OpenProj (si es tarea que no tenga consumo)
                //if (!bBorrarEstructura)
                //{
                //    ItemsProyecto oItemD = new ItemsProyecto();
                //    //Borrado de Proyectos Técnicos
                //    foreach (DictionaryEntry item in htPTs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            ProyTec.Eliminar(tr, oItemD.codPT);
                //    }
                //    //Borrado de Fases
                //    foreach (DictionaryEntry item in htFs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            FASEPSP.Delete(tr, oItemD.codFase);
                //    }
                //    //Borrado de Actividades
                //    foreach (DictionaryEntry item in htAs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            ACTIVIDADPSP.Delete(tr, oItemD.codActiv);
                //    }
                //    //Borrado de Hitos de fecha
                //    foreach (DictionaryEntry item in htHFs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            HITOPSP.Delete(tr, "HF", oItemD.codTarea);
                //    }
                //    //Borrado de Tareas que no tengan consumos
                //    foreach (DictionaryEntry item in htItems)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //        {
                //            if (oItemD.Consumido == 0)
                //                TAREAPSP.Delete(tr, oItemD.codTarea);
                //        }
                //    }
                //}
                #endregion

                //Cierro transaccion
                Conexion.CommitTransaccion(tr);
                if (sMensError == "")
                {
                    sMensError = "OK";
                }
                else
                {
                    sMensError = "OKMSG@#@" + sMensError;
                }
                return(sMensError);
            }
            catch (Exception ex)
            {
                Conexion.CerrarTransaccion(tr);
                return(Errores.mostrarError("Error al cargar la estructura a partir del fichero XML", ex));
            }
            finally
            {
                Conexion.Cerrar(oConn);
            }
        }