/// <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); //} }