Ejemplo n.º 1
0
        /// <summary>
        /// Carga en pantalla la estructura técnica contenida en el archivo XML para ver si es válida o no
        /// </summary>
        private string Validar(bool bBorrarEstructura)
        {
            StringBuilder sb = new StringBuilder();       //Aqui construiré el HTML de la tabla con la estructura técnica
            StringBuilder sbHito = new StringBuilder();   //Aqui construiré el HTML de la tabla de hitos de fecha
            StringBuilder sbTareas = new StringBuilder(); //Aqui construiré el churro con la estructura técnica (incluido hitos) para su grabación
            StringBuilder sbRecursos = new StringBuilder();
            int           idPSN = -1, iMargen = 0, iCodUne = -1, iOrden = 1;
            string        sTipo, sNota = "", sTaskUID = "", sFIPL = "", sFFPL = "", sFFPR = "", sWorkTarea = "";
            string        sCodUser = "", sResourceID = "", sAux = "", sMsg = "";
            bool          bFacturable;
            decimal       dETPL = 0, dETPR = 0, dAux = 0;

            //SqlConnection oConn = null;
            //SqlTransaction tr = null;

            #region cargo el fichero
            //string strFileNameOnServer = Server.MapPath(".") + @"\" + Session["IDFICEPI_ENTRADA"] + @".xml";
            string         strFileNameOnServer = getPath(Session["IDFICEPI_ENTRADA"].ToString(), "xml");
            HttpPostedFile selectedFile        = txtArchivo.PostedFile;
            try
            {
                selectedFile.SaveAs(strFileNameOnServer);
                docxml.Load(strFileNameOnServer);
                File.Delete(strFileNameOnServer);
                if (!flEstructuraCorrecta(docxml))
                {
                    return("Error@#@La estructura a importar no es correcta.");
                }
            }
            catch (Exception ex)
            {
                return("Error@#@" + Errores.mostrarError("Error al guardar el fichero XML", ex));
            }
            #endregion
            #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);
            htTareas = new Hashtable();
            try
            {
                iCodUne     = PROYECTOSUBNODO.GetNodo(null, idPSN);
                bFacturable = PROYECTOSUBNODO.GetFacturable(null, idPSN);

                XmlNodeList TAREAS    = docxml.GetElementsByTagName("Tasks");
                XmlNodeList ListaTask = ((XmlElement)TAREAS[0]).GetElementsByTagName("Task");

                XmlNodeList Assignments     = docxml.GetElementsByTagName("Assignments");
                XmlNodeList ListaAssignment = ((XmlElement)Assignments[0]).GetElementsByTagName("Assignment");

                #region Leo el XML generado por OpenProj
                sb.Append("<table id='tblDatos' class='texto MANO' style='width: 800px;' mantenimiento='0'>");
                sb.Append("<colgroup><col style='width:430px;' />"); //Denominacion
                sb.Append("<col style='width:80px;' />");            //ETPL
                sb.Append("<col style='width:70px;' />");            //FIPL
                sb.Append("<col style='width:70px;' />");            //FFPL
                sb.Append("<col style='width:80px;' />");            //ETPR
                sb.Append("<col style='width:70px;' />");            //FFPR
                sb.Append("</colgroup>");                            //
                sb.Append("<tbody>");

                sbHito.Append("<table id='tblDatos2' class='texto MANO' style='width: 550px;' mantenimiento='0'>");
                sbHito.Append("<colgroup><col style='width:25px;' /><col style='width:450px;' /><col style='width:75px;' /></colgroup>");
                sbHito.Append("<tbody>");

                foreach (XmlElement NODO in ListaTask)
                {
                    #region recojo datos del XML
                    XmlNodeList sUID          = NODO.GetElementsByTagName("UID");
                    XmlNodeList sNAME         = NODO.GetElementsByTagName("Name");
                    XmlNodeList sOUTLINELEVEL = NODO.GetElementsByTagName("OutlineLevel");
                    XmlNodeList sNot          = NODO.GetElementsByTagName("Notes");
                    XmlNodeList sStart        = NODO.GetElementsByTagName("Start");
                    XmlNodeList sFinish       = NODO.GetElementsByTagName("Finish");
                    XmlNodeList sDuration     = NODO.GetElementsByTagName("Duration");
                    XmlNodeList sWork         = NODO.GetElementsByTagName("Work");
                    XmlNodeList sBaseline     = NODO.GetElementsByTagName("Baseline");
                    XmlNodeList sMilestone    = NODO.GetElementsByTagName("Milestone");
                    XmlNodeList sWBS          = NODO.GetElementsByTagName("WBS");
                    XmlNodeList sAttribExten  = NODO.GetElementsByTagName("ExtendedAttribute");

                    sTaskUID = sUID[0].InnerText;
                    dETPL    = 0;
                    dETPR    = 0;
                    sFIPL    = "";
                    sFFPL    = "";
                    sFFPR    = "";
                    if (sStart.Count != 0)
                    {
                        sFIPL = sStart[0].InnerText.Substring(8, 2) + "/" + sStart[0].InnerText.Substring(5, 2) + "/" + sStart[0].InnerText.Substring(0, 4);
                    }
                    if (sFinish.Count != 0)
                    {
                        sFFPL = sFinish[0].InnerText.Substring(8, 2) + "/" + sFinish[0].InnerText.Substring(5, 2) + "/" + sFinish[0].InnerText.Substring(0, 4);
                        sFFPR = sFFPL;
                    }

                    //Si hay línea base cojo sus datos
                    if (sBaseline.Count != 0)
                    {
                        XmlNodeList lAtribs = sBaseline[0].ChildNodes;
                        foreach (XmlNode oNodo in lAtribs)
                        {
                            switch (oNodo.Name)
                            {
                            case "Work":
                                dETPL = flDuracionSUPER(oNodo.InnerText);
                                dETPR = getSumatorioWork(ListaAssignment, sTaskUID);;
                                break;

                            case "Start":
                                sFIPL = oNodo.InnerText.Substring(8, 2) + "/" + oNodo.InnerText.Substring(5, 2) + "/" + oNodo.InnerText.Substring(0, 4);
                                break;

                            case "Finish":
                                sFFPL = oNodo.InnerText.Substring(8, 2) + "/" + oNodo.InnerText.Substring(5, 2) + "/" + oNodo.InnerText.Substring(0, 4);
                                break;
                            }
                        }
                    }
                    else
                    {//Si no hay línea base, el ETPL hay que obtenerlo como el sumatorio de los elementos <Work> de cada <Assignment> para esa tarea
                        dETPL = getSumatorioWork(ListaAssignment, sTaskUID);
                        dETPR = dETPL;
                    }

                    if (sNot.Count == 0)
                    {
                        sNota = "";
                    }
                    else
                    {
                        sNota = sNot[0].InnerText;
                    }
                    #endregion

                    #region cálculo del tipo y de la identación del elemento
                    if (sMilestone.Count != 0 && sMilestone[0].InnerText == "1")
                    {
                        //bEsHito = true;
                        sTipo   = "HF";
                        iMargen = 0;
                    }
                    else
                    {
                        if (sWBS.Count == 0)
                        {
                            sTipo = "T";
                        }
                        else
                        {
                            sTipo = sWBS[0].InnerText;
                        }
                        if (sTipo == "")
                        {
                            sTipo = "T";
                        }
                        //if (iOrden == 1)
                        //{
                        //    sTipo = "P";
                        //    iMargen = 0;
                        //}
                        if (sTipo == "PT")
                        {
                            sTipo   = "P";
                            iMargen = 0;
                        }
                    }
                    //switch (sTipo)
                    //{
                    //    case "P":
                    //        iMargen = 0;
                    //        break;
                    //    case "F":
                    //        iMargen = 20;
                    //        break;
                    //    case "A":
                    //        if (sOUTLINELEVEL[0].InnerText == "2")
                    //            iMargen = 20;
                    //        else
                    //            if (sOUTLINELEVEL[0].InnerText == "3")
                    //                iMargen = 40;
                    //            else
                    //            {//es un error -> lo traduzco a tarea
                    //                sTipo = "T";
                    //                iMargen = 20;
                    //            }
                    //        break;
                    //    case "T":
                    //        if (sOUTLINELEVEL[0].InnerText == "2")
                    //            iMargen = 20;
                    //        else
                    //            if (sOUTLINELEVEL[0].InnerText == "3")
                    //                iMargen = 40;
                    //            else
                    //            {
                    //                if (sOUTLINELEVEL[0].InnerText == "4")
                    //                    iMargen = 60;
                    //                else
                    //                {
                    //                    //es un error -> lo traduzco a tarea
                    //                    iMargen = 20;
                    //                }
                    //            }
                    //        break;
                    //    case "HF":
                    //        iMargen = 0;
                    //        break;
                    //    default://No trae tipo -> lo traduzco a tarea
                    //        iMargen = 20;
                    //        sTipo = "T";
                    //        break;
                    //}
                    sAux = sOUTLINELEVEL[0].InnerText;
                    if (sAux == "" || sAux == "0")
                    {
                        sAux = "1";
                    }
                    iMargen = 20 * (int.Parse(sAux) - 1);
                    #endregion

                    #region Añado el item a la estructura
                    if (sTipo != "HF")
                    {
                        sb.Append("<tr style='height:20px' tipo='" + sTipo + "' id=" + sTaskUID + " mar=" + iMargen.ToString());
                        sb.Append(" nota='" + sNota + "' >");
                        sb.Append("<td style='text-align:left; padding-left:3px;'>");
                        switch (sTipo)
                        {
                        case "P":
                            sb.Append("<img src='../../../../Images/imgProyTecN.gif' title='Proyecto técnico' class='ICO' style='margin-left:" + iMargen + "px'>");
                            break;

                        case "F":
                            sb.Append("<img src='../../../../Images/imgFaseN.gif' title='Fase' class='ICO' style='margin-left:" + iMargen + "px'>");
                            break;

                        case "A":
                            sb.Append("<img src='../../../../Images/imgActividadN.gif' title='Actividad' class='ICO' style='margin-left:" + iMargen + "px'>");
                            break;

                        case "T":
                            sb.Append("<img src='../../../../Images/imgTareaN.gif' title='Tarea' class='ICO' style='margin-left:" + iMargen + "px'>");
                            break;
                        }
                        sb.Append(sNAME[0].InnerText + "</td>");
                        if (sTipo == "T")
                        {
                            sb.Append("<td style='text-align:right;'>" + dETPL.ToString("#,###.##") + "</td>");
                            sb.Append("<td style='text-align:center;'>" + sFIPL + "</td>");
                            sb.Append("<td style='text-align:center;'>" + sFFPL + "</td>");
                            sb.Append("<td style='text-align:right;'>" + dETPR.ToString("#,###.##") + "</td>");
                            sb.Append("<td  style='text-align:right;padding-right:3px;'>" + sFFPR + "</td></tr>");
                            htTareas.Add(sTaskUID, sFIPL + "@" + sFFPL);
                        }
                        else
                        {
                            sb.Append("<td colspan=5></td></tr>");
                        }
                    }
                    else
                    {
                        sbHito.Append("<tr style='height:20px' tipo='" + sTipo + "' id=" + sTaskUID + " nota='" + sNota + "' >");
                        sbHito.Append("<td><img src='../../../../Images/imgHitoN.gif' border='0' title='Hito' class='ICO'></td>");
                        sbHito.Append("<td>" + sNAME[0].InnerText + "</td>");
                        sbHito.Append("<td>" + sFIPL + "</td></tr>");
                    }
                    sbTareas.Append(sTipo + "#@#" + sTaskUID + "#@#" + iMargen.ToString() + "#@#" + sNAME[0].InnerText + "#@#" +
                                    dETPL.ToString() + "#@#" + sFIPL + "#@#" + sFFPL + "#@#" + dETPR.ToString() + "#@#" + sFFPR +
                                    "#@#" + sNota + "/#/");
                    iOrden++;
                    #endregion
                }
                sb.Append("</tbody>");
                sb.Append("</table>");
                sbHito.Append("</tbody>");
                sbHito.Append("</table>");

                #endregion

                #region Si hay recursos con nº empleado SUPER y con asignación a tarea, los meto
                bool bHayRecursos = false, bPermiteRecursosPST = PROYECTOSUBNODO.GetAdmiteRecursoPST(null, idPSN);
                //if (bPermiteRecursosPST)
                //{
                sCodUser    = "";
                sResourceID = "";
                htRecursos  = new Hashtable();
                #region recojo los recursos que tengan indicado código de usuario en el campo Initials y los meto en una hashtable
                XmlNodeList Resources     = docxml.GetElementsByTagName("Resources");
                XmlNodeList ListaRecursos = ((XmlElement)Resources[0]).GetElementsByTagName("Resource");
                foreach (XmlElement RECURSO in ListaRecursos)
                {
                    XmlNodeList ResourceID = RECURSO.GetElementsByTagName("UID");
                    sResourceID = ResourceID[0].InnerText;

                    XmlNodeList Initials = RECURSO.GetElementsByTagName("Initials");
                    if (Initials.Count != 0)
                    {
                        sCodUser = Initials[0].InnerText.Replace(".", "");
                        if (Utilidades.isNumeric(sCodUser))
                        {
                            //sino está en la hashtable (resourceid - t314_idusuario), compruebo que exista y lo introduzco
                            if (!htRecursos.ContainsKey(sResourceID))
                            {
                                //if (Recurso.CodigoRed(int.Parse(sCodUser)) != "")
                                sAux = Recurso.Asignable(int.Parse(sCodUser), idPSN, bPermiteRecursosPST);
                                if (sAux == "OK")
                                {
                                    htRecursos.Add(sResourceID, sCodUser);
                                    bHayRecursos = true;
                                }
                                else
                                {
                                    sMsg += sAux;// "El empleado SUPER " + sCodUser + "  no puede ser asignado al proyecto.\n\n";
                                }
                            }
                        }
                    }
                }
                #endregion
                #region Creo una lista con asignaciones de recursos a tareas
                if (bHayRecursos)
                {
                    foreach (XmlElement Asignacion in ListaAssignment)
                    {
                        //Recojo el código SUPER del recurso en la tarea
                        sCodUser = "";
                        XmlNodeList ResourceUID = Asignacion.GetElementsByTagName("ResourceUID");
                        sResourceID = ResourceUID[0].InnerText;;
                        if (sResourceID == "-65535")
                        {
                            sResourceID = "0";
                        }
                        if (htRecursos[sResourceID] != null)
                        {
                            sCodUser = htRecursos[sResourceID].ToString();
                        }
                        if (sCodUser != "")
                        {
                            //Recojo el código de la tarea
                            XmlNodeList TaskUID = Asignacion.GetElementsByTagName("TaskUID");
                            sTaskUID = TaskUID[0].InnerText;
                            //Recojo el esfuerzo del recurso en la tarea
                            XmlNodeList WorkTarea = Asignacion.GetElementsByTagName("Work");
                            dAux       = flDuracionSUPER(WorkTarea[0].InnerText);
                            sWorkTarea = dAux.ToString();
                            if (sTaskUID != "" && sWorkTarea != "")
                            {
                                //if (htTareas[sTaskUID] != null)
                                //{
                                sFIPL = "";
                                sFFPL = "";
                                sAux  = htTareas[sTaskUID].ToString();
                                if (sAux != "")
                                {
                                    string[] aFechas = Regex.Split(sAux, @"@");
                                    sFIPL = aFechas[0];
                                    sFFPL = aFechas[1];
                                }
                                sbRecursos.Append(sTaskUID + "#@#" + sCodUser + "#@#" + sWorkTarea + "#@#" + sFIPL + "#@#" + sFFPL + "/#/");
                                //}
                            }
                        }
                    }
                }
                #endregion
                //}
                #endregion

                //Cierro transaccion
                //Conexion.CommitTransaccion(tr);

                strTablaHTMLTarea      = sb.ToString();
                strTablaHTMLHito       = sbHito.ToString();
                this.hdnRecursos.Value = sbRecursos.ToString();
                this.hdnTareas.Value   = sbTareas.ToString();
                if (sMsg == "")
                {
                    sMsg = "OK";
                }
                return(sMsg);
            }
            catch (Exception ex)
            {
                //Conexion.CerrarTransaccion(tr);
                return(Errores.mostrarError("Error al cargar la estructura a partir del fichero XML", ex));
            }
            //finally
            //{
            //    Conexion.Cerrar(oConn);
            //}
        }