private string ObtenerEstructura_Old(int iPlant) {/* Devuelve una lista del catalogo de tareas de la plantilla que se pasa por parámetro * mas una lista de los hitos de cumplimiento discontinuo * En sTipoPlant nos indica si es un Proyecto Tecnico o un Proyecto Economico */ StringBuilder sb = new StringBuilder(); StringBuilder slHitos = new StringBuilder(); string sPlant; //string sDesTipo = "", sDesc, sTipo, sTarea, sOrden, sMargen, sPlant,sFact; try { sPlant = iPlant.ToString(); SqlDataReader dr = PlantTarea.Catalogo(iPlant); while (dr.Read()) { //sb.Append(sPlant + "##" + sTarea + "##" + sDesTipo + "##" + sOrden + "##" + sMargen + "##" + sDesc + "///"); sb.Append(sPlant); sb.Append("##"); sb.Append(dr["t339_iditems"].ToString()); sb.Append("##"); sb.Append(dr["Tipo"].ToString()); sb.Append("##"); sb.Append(dr["orden"].ToString()); sb.Append("##"); sb.Append(dr["margen"].ToString()); sb.Append("##"); sb.Append(dr["Nombre"].ToString()); sb.Append("##"); sb.Append(((bool)dr["t339_facturable"])? "T":"F"); sb.Append("///"); } dr.Close(); dr.Dispose(); SqlDataReader drH = PlantTarea.CatalogoHitos(iPlant); while (drH.Read()) { //sb.Append(sPlant + "##" + sHito + "##" + sDesTipo + "##" + sOrden + "##" + sMargen + "##" + sDesc + "///"); slHitos.Append(sPlant); slHitos.Append("##"); slHitos.Append(drH["t369_idHito"].ToString()); slHitos.Append("##HC##"); slHitos.Append(drH["t369_orden"].ToString()); slHitos.Append("##0##"); slHitos.Append(drH["t369_deshito"].ToString()); slHitos.Append("///"); } drH.Close(); drH.Dispose(); return("OK@#@" + sb.ToString() + "@#@" + slHitos); } catch (Exception ex) { return("Error@#@" + Errores.mostrarError("Error al obtener los elementos de la plantilla", ex)); } }
private string Procesar(string sForzar, string sAnno, string strDatos) { string sResul = ""; int nSubnodo = 0, nPE = 0, nPSN = 0;//, nDesde = 0, nHasta = 0, nAux = 0 Hashtable htSubnodos = new Hashtable(); Hashtable htNodos = new Hashtable(); NODO oNodoAux = null; int[] nDatosNodo; int? idFicepiValidador = null; try { #region abrir conexión y transacción try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccionSerializable(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 string[] aProyectos = Regex.Split(strDatos, "///"); foreach (string oProyecto in aProyectos) { if (oProyecto == "") { continue; } string[] aValores = Regex.Split(oProyecto, "##"); /// aValores[0] = idNodo /// aValores[1] = idNaturaleza /// aValores[2] = FIV /// aValores[3] = FFV /// aValores[4] = idPlantilla /// aValores[5] = Denominación Naturaleza /// aValores[6] = Esreplicable /// /// aValores[7] = Hereda Nodo /// aValores[8] = Id Usuario responsable /// aValores[9] = Imputable GASVI /// aValores[10] = Id Ficepi Validador GASVI if (sForzar == "N" && PROYECTOSUBNODO.ExistePIG(tr, int.Parse(aValores[0]), int.Parse(aValores[1]), short.Parse(sAnno))) { continue; } #region Datos de nodo y subnodo nDatosNodo = (int[])htSubnodos[int.Parse(aValores[0])]; if (nDatosNodo == null) { int nCountSubnodosManiobra2 = 0; int idSubnodoManiobra2 = 0; int nCountSubnodosNoManiobra = 0; int idSubnodoNoManiobra = 0; DataSet dsSubNodos = SUBNODO.CatalogoActivos(tr, int.Parse(aValores[0]), true); foreach (DataRow oSN in dsSubNodos.Tables[0].Rows) { if ((byte)oSN["t304_maniobra"] == 2) { nCountSubnodosManiobra2++; idSubnodoManiobra2 = (int)oSN["t304_idsubnodo"]; } else if ((byte)oSN["t304_maniobra"] == 0) { nCountSubnodosNoManiobra++; idSubnodoNoManiobra = (int)oSN["t304_idsubnodo"]; } } dsSubNodos.Dispose(); //nSubnodo = SUBNODO.ObtenerSubnodoManiobra2(tr, int.Parse(aValores[0])); NODO oNodo = NODO.Select(tr, int.Parse(aValores[0])); if (nCountSubnodosNoManiobra == 1) { nSubnodo = idSubnodoNoManiobra; } else if (nCountSubnodosManiobra2 >= 1) { nSubnodo = idSubnodoManiobra2; } else { nSubnodo = SUBNODO.Insert(tr, "Improductivos genéricos", int.Parse(aValores[0]), 0, true, 2, oNodo.t314_idusuario_responsable, null); } htSubnodos.Add(int.Parse(aValores[0]), new int[3] { int.Parse(aValores[0]), nSubnodo, oNodo.t314_idusuario_responsable }); nDatosNodo = (int[])htSubnodos[int.Parse(aValores[0])]; } oNodoAux = (NODO)htNodos[int.Parse(aValores[0])]; if (oNodoAux == null) { oNodoAux = NODO.Select(tr, int.Parse(aValores[0])); htNodos.Add(int.Parse(aValores[0]), oNodoAux); } #endregion string sDenominacion = sAnno + " " + Utilidades.unescape(aValores[5]) + " (" + oNodoAux.t303_denabreviada + ")"; int nIdClientePIG = CLIENTE.ObtenerClientePIG(tr, int.Parse(aValores[0])); nPE = PROYECTO.Insert(tr, "A", sDenominacion.Substring(0, (sDenominacion.Length > 70) ? 70 : sDenominacion.Length), "", nIdClientePIG, null, null, int.Parse(aValores[1]), 4, DateTime.Parse(aValores[2]), DateTime.Parse(aValores[3]), "S", "J", "J", short.Parse(sAnno), false, false, (aValores[6] == "1")? true:false, null, false, null, null, Constantes.gIdNLO_Defecto); //nPSN = PROYECTOSUBNODO.Insert(tr, nPE, nDatosNodo[1], false, "C", true, nDatosNodo[2], // sAnno + " " + Utilidades.unescape(aValores[5]), // "X", "X", false, true, false, false, false, "", "", "", null, null, null, null, // null, null, false, 0); //Mikel 30/12/2011. Pongo como seudónimo del subnodo la misma denominación que para el proyecto if (aValores[10] != "" && aValores[10] != "null") { idFicepiValidador = int.Parse(aValores[10]); } else { idFicepiValidador = null; } //Mikel 02/02/2016 Los PIG deben llevar el admite recurso PST a cero nPSN = PROYECTOSUBNODO.Insert(tr, nPE, nDatosNodo[1], false, "C", (aValores[7] == "1") ? true : false, int.Parse(aValores[8]), //nDatosNodo[2],//Id Usuario Responsable sDenominacion.Substring(0, (sDenominacion.Length > 70) ? 70 : sDenominacion.Length), "X", "X", (aValores[9] == "1") ? true : false, //Imputable GASVI false, //Admite recurso PST false, false, false, "", "", "", null, null, null, null, null, idFicepiValidador, //Id Ficepi Validador GASVI false, 0); //A falta de tener en cuenta si la naturaleza tiene plantilla. TAREAPSP.UpdateVigenciaByPSN(tr, nPSN, DateTime.Parse(aValores[2]), DateTime.Parse(aValores[3])); #region Grabación de plantilla if (aValores[4] != "0") { //Hay que grabar la plantilla de PE. int iPos, iMargen, iPT = -1, iFase = -1, iActiv = -1, iTarea = -1, iHito = -1, iAux = -1, iOrden = 0, idItemHitoPl; double fDuracion; decimal fPresupuesto; string sTipo, sDesc, sFiniPL, sFfinPL, sFiniV, sFfinV, sAux, sAvisos, sIdTareaPL, sCad; bool bFacturable, bObligaEst, bAvanceAutomatico, bEstadoTarea; ArrayList alTareas = new ArrayList(); PROYECTOSUBNODO.BorrarPTByPSN(tr, nPSN); #region 1º Se insertan las filas de la estructura SqlDataReader dr = PlantTarea.Catalogo(int.Parse(aValores[4])); while (dr.Read()) { sTipo = dr["Tipo"].ToString(); if (sTipo == "H") { sTipo = "HT"; } sDesc = Utilidades.escape(dr["Nombre"].ToString()); iMargen = int.Parse(dr["margen"].ToString()); //Si la linea es de hito compruebo si el hito es de tarea o no para actualizar la variable iTarea if (sTipo == "HT" || sTipo == "HM" || sTipo == "HF") { switch (iMargen) { case 80: //es un hito de tarea por lo que mantengo el código de tarea break; case 60: //es un hito de fase y actividad o de tarea con actividad sin fase if (iFase != -1) { iTarea = -1; } break; case 40: //es un hito de fase o de tarea sin actividad ni fase o de actividad sin fase if (iFase != -1) { iTarea = -1; iActiv = -1; } else { if (iActiv != -1) { iTarea = -1; } } break; case 20: //es un hito proyecto técnico case 0: //es un hito de proyecto económico iTarea = -1; iActiv = -1; iFase = -1; break; } } fDuracion = 0; sFiniPL = ""; //¿alguno es obligatorio? sFfinPL = ""; sFiniV = Fechas.primerDiaMes(DateTime.Today).ToShortDateString(); sFfinV = ""; fPresupuesto = 0; sIdTareaPL = dr["t339_iditems"].ToString(); bFacturable = (bool)dr["t339_facturable"]; //if (sEstado != "D") iOrden++; //iOrden = int.Parse(aElem[8]); //Si no ha cambiado la linea pero el orden actual es distinto del original hay que updatear la linea para actualizar el orden switch (sTipo) { case "P": iPT = -1; iFase = -1; iActiv = -1; break; case "F": iFase = -1; iActiv = -1; break; case "A": iActiv = -1; if (iMargen != 40) { iFase = -1; } break; case "T": iTarea = -1; if (iMargen == 40) { iFase = -1; } else { if (iMargen != 60) { iFase = -1; iActiv = -1; } } break; case "HT": case "HF": case "HM": iHito = -1; //int.Parse(aElem[7]); break; } bObligaEst = (bool)dr["obliga"]; bAvanceAutomatico = (bool)dr["avance"]; sAux = EstrProy.Insertar(tr, int.Parse(aValores[0]), nPE, nPSN, sTipo, sDesc, iPT, iFase, iActiv, iMargen, iOrden, sFiniPL, sFfinPL, fDuracion, sFiniV, sFfinV, fPresupuesto, bFacturable, bObligaEst, bAvanceAutomatico, "1", "", 0); iPos = sAux.IndexOf("##"); iAux = int.Parse(sAux.Substring(0, iPos)); sAvisos = sAux.Substring(iPos + 2); switch (sTipo) { case "P": iPT = iAux; break; case "F": iFase = iAux; break; case "A": iActiv = iAux; break; case "T": iTarea = iAux; if (sIdTareaPL != "" && sIdTareaPL != "-1") { string[] aDatosAux = new string[] { sIdTareaPL, iAux.ToString() }; alTareas.Add(aDatosAux); //Grabo los atributos estadísticos provenientes de la plantilla. iAux=código de tarea TAREAPSP.InsertarAE(tr, int.Parse(sIdTareaPL), iAux); } //Hay que guardar las tareas que quedan pendientes, ya que luego hay que actualizar el estado en pantalla bEstadoTarea = TAREAPSP.bFaltanValoresAE(tr, short.Parse(aValores[0]), iAux); if (bEstadoTarea) { //actualizo el estado de la tarea TAREAPSP.Modificar(tr, iTarea, sDesc, iPT, iActiv, iOrden, sFiniPL, sFfinPL, fDuracion, sFiniV, sFfinV, (int)Session["UsuarioActual"], fPresupuesto, 2, bFacturable); //sAvisos = "Se han insertado tareas que quedan en estado Pendiente ya que el C.R. tiene atributos estadísticos\nobligatorios para los que la tarea no tiene valores asignados"; //if (sTareasPendientes == "") sTareasPendientes = iAux.ToString(); //else sTareasPendientes += "//"+ iAux.ToString(); } break; case "HT": iHito = iAux; break; } if (sTipo.Substring(0, 1) == "H") { AsociarTareasHitos(tr, nPSN, iPT, iFase, iActiv, iTarea, iHito, iMargen); } } dr.Close(); dr.Dispose(); #endregion #region 2º Se insertan las filas de los hitos de cumplimiento discontinuo dr = PlantTarea.CatalogoHitos(int.Parse(aValores[4])); while (dr.Read()) { sTipo = "HM"; sDesc = dr["t369_deshito"].ToString(); idItemHitoPl = (int)dr["t369_idhito"]; iOrden = int.Parse(dr["t369_orden"].ToString()); sAux = EstrProy.Insertar(tr, int.Parse(aValores[0]), nPE, nPSN, sTipo, sDesc, 0, 0, 0, 0, iOrden, "", "", 0, "", "", 0, false, false, false, "1", "", 0); iPos = sAux.IndexOf("##"); iAux = int.Parse(sAux.Substring(0, iPos)); sAvisos = sAux.Substring(iPos + 2); //Si es hito de cumplimiento discontinuo y se ha cargado desde plantilla hay que grabar sus tareas if (sTipo == "HM") { if (idItemHitoPl > 0) { //Recojo las tareas de plantilla del código de hito en plantilla sCad = HITOE_PLANT.fgListaTareasPlantilla(tr, idItemHitoPl); string[] aElems2 = Regex.Split(sCad, @"##"); for (int j = 0; j < aElems2.Length; j++) { sIdTareaPL = aElems2[j]; if (sIdTareaPL != "" && sIdTareaPL != "-1") { //Identifico el código de tarea real asociado al codigo de tarea de plantilla for (int n = 0; n < alTareas.Count; n++) { if (((string[])alTareas[n])[0] == sIdTareaPL) {//Inserto la tarea del hito sCad = ((string[])alTareas[n])[1]; iTarea = int.Parse(sCad); EstrProy.InsertarTareaHito(tr, iAux, iTarea); break; } } } } } } }//while dr.Close(); dr.Dispose(); #endregion } #endregion } Conexion.CommitTransaccion(tr); sResul = "OK"; } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al crear los proyectos improductivos genéricos.", ex, false); } finally { Conexion.Cerrar(oConn); } return(sResul); }
private string ObtenerTareas(int iPlant, string sTipoPlant) { /* Devuelve el código HTML del catalogo de tareas de la plantilla que se pasa por parámetro * En sTipoPlant nos indica si es un Proyecto Tecnico o un Proyecto Economico */ StringBuilder sb = new StringBuilder(); string sIdTarea, sDesTipo = "", sDesc, sTipo, sTarea, sOrden, sMargen, sObligaEst; //,sAvance int iId = -1; bool bModificable, bFacturable, bAux, bAvance; //Para comprobar posteriormente modificaciones concurrentes por parte de varios usuarios en la plantilla ArrayList aEstr = new ArrayList(); try { if (this.txtModificable.Text == "T") { bModificable = true; } else { bModificable = false; } SqlDataReader dr = PlantTarea.Catalogo(iPlant); sb.Append("<table id='tblDatos' class='texto' style='WIDTH:700px;' mantenimiento='1'>"); sb.Append("<colgroup><col style='width:600px' /><col style='width:50px' /><col style='width:50px' /></colgroup>"); sb.Append("<tbody>"); //Si es una plantilla de proyecto técnico, inserto una línea inventada de tipo P.T. if (sTipoPlant == "T") { iId++; sIdTarea = iId.ToString(); sb.Append("<tr id='" + sIdTarea + "' tipo='P.T.' sAv='F' sOb='F' est='N' cT='' ord='0' p1='0' p2='0' style='display:none;height:20px;'>"); sb.Append("<td><img src='../../../../Images/imgProyTecOff.gif' border='0' title='P.T. grabado'>"); sb.Append("<input type='text' name='txtD" + sIdTarea + "' id='Desc" + sIdTarea + "' class='txtL' style='width:400px;margin-left:3px' MaxLength='50' value=''></td>"); //Columna 2 y 3 sb.Append("<td></td><td style='text-align:center;'></td></tr>"); } while (dr.Read()) { //sIdTarea = dr["idTarea"].ToString(); iId++; sIdTarea = iId.ToString(); sTipo = dr["Tipo"].ToString(); switch (sTipo) { case "P": sDesTipo = "P.T."; break; case "F": sDesTipo = "FASE"; break; case "A": sDesTipo = "ACTI."; break; case "T": sDesTipo = "TAREA"; break; case "H": sDesTipo = "HITO"; break; } sDesc = dr["Nombre"].ToString(); sTarea = dr["t339_iditems"].ToString(); sOrden = dr["orden"].ToString(); //Para el control de modificaciones concurrentes string[] sEstr = new string[3] { sOrden, sTipo, sTarea }; aEstr.Add(sEstr); sMargen = dr["margen"].ToString(); bFacturable = bool.Parse(dr["t339_facturable"].ToString()); bAvance = bool.Parse(dr["avance"].ToString()); //bAux = bool.Parse(dr["avance"].ToString()); //if (bAux) sAvance = "T"; //else sAvance = "F"; bAux = bool.Parse(dr["obliga"].ToString()); if (bAux) { sObligaEst = "T"; } else { sObligaEst = "F"; } //sb.Append("<tr id='" + sIdTarea + "' sAv='" + sAvance + "' sOb='" + sObligaEst + "' tipo='" + sDesTipo + "' est='N' cT='" + sTarea + "'"); sb.Append("<tr id='" + sIdTarea + "' sOb='" + sObligaEst + "' tipo='" + sDesTipo + "' est='N' cT='" + sTarea + "'"); sb.Append(" style='height:20px;' ord='" + sOrden + "' p1='0' p2='0' onclick='mm(event)' "); if (this.txtAmbito.Text == "DEPARTAMENTAL" || sDesTipo == "P.T.") { sb.Append(" ondblclick='mostrarDetalle()'"); } if (bModificable) { sb.Append(" onkeydown='accionLinea(event)'"); } //Columna 1 string sTitle = (sDesTipo == "TAREA") ? sDesc : ""; sb.Append("><td title='" + sTitle + "'>"); switch (sDesTipo) { case "P.T.": sb.Append("<img src='../../../../Images/imgProyTecOff.gif' border='0' title='P.T. grabado' style='CURSOR: url(../../../../images/imgManoAzul2.cur),pointer;vertical-align:middle;'>"); break; case "FASE": sb.Append("<img src='../../../../Images/imgFaseOff.gif' border='0' title='Fase grabada' style='vertical-align:middle;margin-left:20px'>"); break; case "ACTI.": sb.Append("<img src='../../../../Images/imgActividadOff.gif' border='0' title='Actividad grabada' style='vertical-align:middle;margin-left:" + sMargen + "px'>"); break; case "TAREA": if (this.txtAmbito.Text == "DEPARTAMENTAL") { sb.Append("<img src='../../../../Images/imgTareaOff.gif' border='0' title='Tarea grabada' style='CURSOR: url(../../../../images/imgManoAzul2.cur),pointer;vertical-align:middle;margin-left:" + sMargen + "px'>"); } else { sb.Append("<img src='../../../../Images/imgTareaOff.gif' border='0' title='Tarea grabada' style='vertical-align:middle;margin-left:" + sMargen + "px'>"); } break; case "HITO": //sb.Append("<img src='../../../../Images/imgHitoOff.gif' border='0' title='Hito grabado' style='CURSOR: url(../../../../images/imgManoAzul2.cur);vertical-align:middle;margin-left:" + sMargen + "px'>"); sb.Append("<img src='../../../../Images/imgHitoOff.gif' border='0' title='Hito grabado' style='vertical-align:middle;margin-left:" + sMargen + "px'>"); break; } //sb.Append("</td>"); //Columna 2 //sb.Append("<input type='text' name='txtD" + sIdTarea + "' id='Desc" + sIdTarea + "' class='txtL' style='width:400;margin-left:" + sMargen + "px' MaxLength='50' value='" + sDesc + "'"); string sML = (sDesTipo == "TAREA") ? "100" : "50"; sb.Append("<input type='text' name='txtD" + sIdTarea + "' id='Desc" + sIdTarea + "' class='txtL' style='width:465px;margin-left:5px;' MaxLength=" + sML + " value='" + sDesc + "'"); if (bModificable) { sb.Append(" onfocus='this.select()' onkeydown='modificarNombreTarea(event)'>"); } else { sb.Append(" readonly=true>"); } sb.Append("</td>"); //Columna 3 if (sTipo == "T") { if (bModificable) { if (bFacturable) { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' checked='true' onclick='modificarItem(this.parentNode.parentNode.id);'></td>"); } else { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' onclick='modificarItem(this.parentNode.parentNode.id);'></td>"); } if (bAvance) { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' checked='true' onclick='modificarItem(this.parentNode.parentNode.id);'></td></tr>"); } else { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' onclick='modificarItem(this.parentNode.parentNode.id);'></td></tr>"); } } else { if (bFacturable) { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' checked='true'></td>"); } else { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla'></td>"); } if (bAvance) { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla' checked='true'></td></tr>"); } else { sb.Append("<td><input type='checkbox' style='width:15px' class='checkTabla'></td></tr>"); } } } else { sb.Append("<td> </td><td> </td></tr>"); } } dr.Close(); dr.Dispose(); sb.Append("</tbody>"); sb.Append("</table>"); //Para el control de modificaciones concurrentes Session["OrdenEstructuraPlant"] = aEstr; this.strTablaHTMLTarea = sb.ToString(); return("plantilla@#@OK@#@" + sb.ToString()); } catch (Exception ex) { Master.sErrores = Errores.mostrarError("Error al obtener las tareas", ex); return(sb.ToString()); } }
private string Grabar(string sIdPlant, string sCadena, string sHitosEspeciales) {/*En el parametro de entrada tenemos en primer lugar el codigo de la plantilla * y luego una lista de elementos del tipo sEstado@#@sTipo@#@sDes@#@sCodigo@#@sOrden@#@sMargen@#@sFacturable@#@avance@#@obligaest## */ string sCad, sTipo, sDesc, sResul = "", sEstado = "N", sCadenaBorrado = "", sTipoPlant, sAux; int iPos, iTarea = -1, iAux = -1, iCodigo = -1, iHito = -1, iMargen = 0; short iOrden = 0, iOrdenAnt = 0; bool bFacturable, bAvance, bObliga; SqlConnection oConn = null; SqlTransaction tr = null; #region Control para comprobar que la estructura no ha variado desde que se ha leido. SqlConnection oConn2 = null; SqlTransaction tr2 = null; try { oConn2 = Conexion.Abrir(); tr2 = Conexion.AbrirTransaccion(oConn2); } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex); return(sResul); } SqlDataReader dr2 = PlantTarea.Catalogo(int.Parse(sIdPlant)); ArrayList aEstrOrig = (ArrayList)Session["OrdenEstructuraPlant"]; ArrayList aEstrActual = new ArrayList(); string sTipo2, sIDItem2, sOrden2; while (dr2.Read()) { sTipo2 = dr2["Tipo"].ToString(); sIDItem2 = dr2["t339_iditems"].ToString(); sOrden2 = dr2["orden"].ToString(); string[] sEstr = new string[3] { sOrden2, sTipo2, sIDItem2 }; aEstrActual.Add(sEstr); } dr2.Close(); dr2.Dispose(); string sMsgError = "Error@#@PSP ha detectado que durante su edición, la estructura ha variado por modificación de otro usuario.\n\nPulse \"Aceptar\" para recuperar la estructura actualizada, teniendo en cuenta que perderá los cambios realizados.\nPulsando \"Cancelar\" permanecerá en la pantalla actual sin realizar la grabación.@#@1"; if (aEstrOrig.Count != aEstrActual.Count) { Conexion.CerrarTransaccion(tr2); Conexion.Cerrar(oConn2); return(sMsgError); } else { for (int i = 0; i < aEstrOrig.Count; i++) { if (((string[])aEstrOrig[i])[0] != ((string[])aEstrActual[i])[0] || ((string[])aEstrOrig[i])[1] != ((string[])aEstrActual[i])[1] || ((string[])aEstrOrig[i])[2] != ((string[])aEstrActual[i])[2] ) { Conexion.CerrarTransaccion(tr2); Conexion.Cerrar(oConn2); return(sMsgError); } } } Conexion.CommitTransaccion(tr2); Conexion.Cerrar(oConn2); Session["OrdenEstructuraPlant"] = null; #endregion try { sCadenaBorrado = sIdPlant + @"//"; //Abro transaccion try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccion(oConn); } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex); return(sResul); } if (lblTipo.Text == "Proyecto económico") { sTipoPlant = "E"; } else { sTipoPlant = "T"; } //Obtengo una cadena solo con la lista de filas a grabar //estado@#@tipo@#@descripcion@#@codPT@#@sCodigo@#@sOrden@#@sMargen@#@sFacturable @#@avance@#@obligaest sCad = sCadena; if (sCad == "") {//Tenemos un desglose vacío. No hacemos nada } else {//Con la cadena generamos una lista y la recorremos para grabar cada elemento string[] aTareas = Regex.Split(sCad, @"##"); for (int i = 0; i < aTareas.Length - 1; i++) { sCad = aTareas[i]; string[] aItems = Regex.Split(sCad, @"@#@"); sEstado = aItems[0]; sTipo = aItems[1]; sDesc = Utilidades.unescape(aItems[2]); sAux = aItems[3]; if (sAux != "") { iCodigo = int.Parse(sAux); } else { iCodigo = -1; } sAux = aItems[4]; if (sAux != "") { iOrdenAnt = short.Parse(sAux); } else { iOrdenAnt = 1; } sCad = aItems[5]; iPos = sCad.IndexOf(@"px"); sAux = sCad.Substring(0, iPos); if (sAux != "") { iMargen = int.Parse(sAux); } else { iMargen = 0; } sCad = aItems[6]; if (sCad == "T") { bFacturable = true; } else { bFacturable = false; } sCad = aItems[7]; if (sCad == "T") { bAvance = true; } else { bAvance = false; } sCad = aItems[8]; if (sCad == "T") { bObliga = true; } else { bObliga = false; } //Si no ha cambiado la linea pero el orden actual es distinto del original hay que updatear la linea para actualizar el orden if (iOrden != iOrdenAnt && sEstado == "N") { sEstado = "U"; } if (sEstado != "D") { iOrden++; } if (sEstado == "D") { sCadenaBorrado += sTipo + "##" + iCodigo + @"@#@"; } switch (sTipo) { case "T": iTarea = iCodigo; break; case "H": iHito = iCodigo; break; } //Si es una plantilla de proyecto técnico no hay que grabar linea de PT if ((sTipoPlant == "T") && (sTipo == "P")) { sEstado = "N"; } switch (sEstado) { case "U": ITEMSPLANTILLA.Update(tr, iCodigo, sTipo, Utilidades.unescape(sDesc), (byte)iMargen, (short)iOrden, int.Parse(sIdPlant), bFacturable, bAvance, bObliga); break; case "I": iAux = ITEMSPLANTILLA.Insert(tr, sTipo, Utilidades.unescape(sDesc), (byte)iMargen, (short)iOrden, int.Parse(sIdPlant), bFacturable, bAvance, bObliga); break; } //switch (sEstado) } //for } //Elimino las filas borradas BorrarDesglose(tr, sCadenaBorrado, sTipoPlant); //Grabo los hitos especiales //sEstado+"##"+Utilidades.escape(sDes)+"##"+sCodigo+"##"+sOrden+"//" sCad = sHitosEspeciales; if (sCad == "") {//Tenemos un desglose vacío. No hacemos nada } else {//Con la cadena generamos una lista y la recorremos para grabar cada elemento string[] aTareas = Regex.Split(sCad, @"@#@"); iOrden = 0; for (int i = 0; i < aTareas.Length - 1; i++) { sCad = aTareas[i]; if (sCad != "") { string[] aElems = Regex.Split(sCad, @"##"); sEstado = aElems[0]; sDesc = Utilidades.unescape(aElems[1]); iHito = int.Parse(aElems[2]); iOrdenAnt = short.Parse(aElems[3]); if (sEstado != "D") { iOrden++; } //Si no ha cambiado la linea pero el orden actual es distinto del original hay que updatear la linea para actualizar el orden if (iOrden != iOrdenAnt && sEstado == "N") { sEstado = "U"; } switch (sEstado) { case "N": break; case "D": HITOE_PLANT.Delete(tr, iHito); break; case "U": HITOE_PLANT.Update(tr, iHito, sDesc, null, null, iOrden); break; case "I": iAux = HITOE_PLANT.Insert(tr, sDesc, "", true, iOrden, int.Parse(sIdPlant)); break; }//switch (sEstado) } } } //Cierro transaccion Conexion.CommitTransaccion(tr); //Recargo el desglose ObtenerTareas(int.Parse(sIdPlant), sTipoPlant); ObtenerHitos(int.Parse(sIdPlant)); //sResul = "OK@#@" + sIdPlant; sResul = "OK@#@" + strTablaHTMLTarea + "@#@" + strTablaHTMLHito; } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al grabar el desglose de la plantilla", ex); } finally { Conexion.Cerrar(oConn); } return(sResul); }
private string ObtenerEstructura(int iPlant) {/* Devuelve una lista del catalogo de tareas de la plantilla que se pasa por parámetro * mas una lista de los hitos de cumplimiento discontinuo */ StringBuilder strBuilder = new StringBuilder(); StringBuilder slHitos = new StringBuilder(); string sDesc, sTipo, sTarea, sOrden, sMargen, sResul = "", sPlant, sFact;//sDesTipo = "" bool bFacturable; try { sPlant = iPlant.ToString(); SqlDataReader dr = PlantTarea.Catalogo(iPlant); while (dr.Read()) { sTipo = dr["Tipo"].ToString(); //switch (sTipo) //{ // case "P": sDesTipo = "P.T."; break; // case "F": sDesTipo = "FASE"; break; // case "A": sDesTipo = "ACTI."; break; // case "T": sDesTipo = "TAREA"; break; // case "H": sDesTipo = "HITO"; break; //} sDesc = dr["Nombre"].ToString(); sTarea = dr["t339_iditems"].ToString(); sOrden = dr["orden"].ToString(); sMargen = dr["margen"].ToString(); bFacturable = bool.Parse(dr["t339_facturable"].ToString()); if (bFacturable) { sFact = "T"; } else { sFact = "F"; } //strBuilder.Append(sPlant + "##" + sTarea + "##" + sDesTipo + "##" + sOrden + "##" + sMargen + "##" + sDesc + "///"); strBuilder.Append(sPlant); strBuilder.Append("##"); strBuilder.Append(sTarea); strBuilder.Append("##"); //strBuilder.Append(sDesTipo); strBuilder.Append(sTipo); strBuilder.Append("##"); strBuilder.Append(sOrden); strBuilder.Append("##"); strBuilder.Append(sMargen); strBuilder.Append("##"); strBuilder.Append(sDesc); strBuilder.Append("##"); strBuilder.Append(sFact); strBuilder.Append("///"); } dr.Close(); dr.Dispose(); SqlDataReader drH = PlantTarea.CatalogoHitos(iPlant); while (drH.Read()) { sDesc = drH["t369_deshito"].ToString(); sTarea = drH["t369_idHito"].ToString(); sOrden = drH["t369_orden"].ToString(); //strBuilder.Append(sPlant + "##" + sHito + "##" + sDesTipo + "##" + sOrden + "##" + sMargen + "##" + sDesc + "///"); slHitos.Append(sPlant); slHitos.Append("##"); slHitos.Append(sTarea); slHitos.Append("##HC##"); slHitos.Append(sOrden); slHitos.Append("##0##"); slHitos.Append(sDesc); slHitos.Append("///"); } drH.Close(); drH.Dispose(); sResul = "OK@#@" + strBuilder.ToString() + "@#@" + slHitos; } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al obtener los elementos de la plantilla", ex); } return(sResul); }