private void AsociarTareasHitos(SqlTransaction tr, int nT305IdProy, int nPT, int nFase, int nActiv, int nTarea, int nHito, int nMargen) { string sTipo = ""; int nCodigo = -1; try { #region 1º Identificar el tipo de Hito if (nMargen == 0) { sTipo = "PE"; //Hito de proyecto económico nCodigo = nT305IdProy; } else { if (nTarea != -1) { sTipo = "T"; //Hito de tarea nCodigo = nTarea; } else { if (nPT != -1 && nFase == -1 && nActiv == -1) // && nTarea == -1 { sTipo = "PT"; //Hito de proyecto técnico nCodigo = nPT; } else if (nFase != -1 && nActiv == -1) // && nTarea == -1 { sTipo = "F"; //Hito de Fase nCodigo = nFase; } else if (nActiv != -1) // && nTarea == -1 { sTipo = "A"; //Hito de Actividad nCodigo = nActiv; } } } #endregion ////2º Se borran las tareas que pudiera haber ligadas al hito //EstrProy.BorrarTareasHito(tr, nHito); //3º Se asocian al hito las tareas que correspondan al "tipo" (nivel) del hito. //EstrProy.AsociarTareasHito(tr, sTipo, nHito, nCodigo, short.Parse(Session["NodoActivo"].ToString())); EstrProy.AsociarTareasHito(tr, sTipo, nHito, nCodigo); } catch (Exception ex) { //Conexion.CerrarTransaccion(tr); Errores.mostrarError("Error al grabar las tareas asociadas a los hitos", ex); } }
public bool bTieneConsumosPE(int nCodPE) { bool bConsumos; try { bConsumos = EstrProy.ExistenConsumosPE(null, nCodPE); } catch (Exception) { bConsumos = false; } return(bConsumos); }
public string bTieneConsumosPT(int nCodPT) { string strReturn = "0"; try { bool bConsumos = EstrProy.ExistenConsumosPT(null, nCodPT); if (bConsumos) { strReturn = "1"; } } catch (Exception) { strReturn = "Error"; } return(strReturn); }
private string Permiso(string sT305IdProy, string sCodUne, string sNumProyEco, string sIdTarea) { string sResul = "N", sEstProy; try { //1º miramos si hay acceso sobre la tarea string sUserAct = Session["UsuarioActual"].ToString(); int iUserAct = int.Parse(sUserAct); sIdTarea = sIdTarea.Replace(".", ""); sResul = TAREAPSP.getAcceso(null, int.Parse(sIdTarea), iUserAct); //N-> no hay acceso R-> acceso en lectura W-> acceso en escritura if (sResul != "N") { //Miramos el estado del proyecto economico. Por que si está cerrado aunque tenga permiso solo se podrá leer sEstProy = EstrProy.estadoProyecto(sT305IdProy); if (sEstProy == "C" || sEstProy == "H") { if (sResul == "W") { sResul = "R"; } } if (sResul == "R") { ModoLectura.Poner(this.Controls); } } gsAcceso = sResul; this.hdnAcceso.Text = sResul; } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al obtener permisos sobre la tarea " + sIdTarea, ex); } //return "OK@#@" + sResul; return(sResul); }
protected string Grabar(string strDatosHito, string sDatosBorrado, string sTareas) { string sResul = "", sTipoHito, sDesHito, sDesHitoLong, sFecha, sEstado, sAlerta, sCiclico, sAccion, sTipoLinea, sCad, sCodTarea, sHitoPE; string[] aDatosHito; int iCodHito, iCodPE, iMargen, iCodHitoOriginal; short iOrden;//iCodCR bool bAlerta = false, bCiclico = false, bHitoPE; DateTime dtFecha = DateTime.Now; try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccionSerializable(oConn); } catch (Exception ex) { sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex); return(sResul); } try { aDatosHito = Regex.Split(strDatosHito, "##"); iCodHito = int.Parse(aDatosHito[1]); //iCodCR = short.Parse(aDatosHito[2]); iCodPE = int.Parse(aDatosHito[3]); sDesHito = Utilidades.unescape(aDatosHito[4]); sDesHitoLong = Utilidades.unescape(aDatosHito[5]); sFecha = aDatosHito[6]; if (sFecha != "") { dtFecha = DateTime.Parse(sFecha); } iOrden = short.Parse(aDatosHito[11]); //Al grabar un hito puede ocurrir que se haya cambiado el tipo de hito lo que implica que antes de grabar //hay que borrar de una tabla e insertar en otra if (sDatosBorrado != "") { #region Borrado string[] aDatosBorrado = Regex.Split(sDatosBorrado, "##"); sAccion = aDatosBorrado[0]; if (sAccion == "borrar") { sTipoHito = aDatosBorrado[1]; iCodHito = int.Parse(aDatosBorrado[2]); iCodHitoOriginal = int.Parse(aDatosBorrado[2]); //Se realiza primero la inserción del nuevo hito y por último el borrado //del viejo, para traspasar la documentación que pudiera tener. //Inserta el hito en la nueva tabla switch (sTipoHito) { case "HF": //iCodHito = EstrProy.InsertarHito(tr, sDesHito, 0, iOrden); iCodHito = EstrProy.InsertarHito(tr, sDesHito, 1, iOrden, iCodPE); break; case "HT": case "HM": //iCodHito = EstrProy.InsertarHitoPE(tr, iCodCR, iCodPE, sDesHito, sFecha, iOrden); iCodHito = EstrProy.InsertarHitoPE(tr, iCodPE, sDesHito, sFecha, iOrden, sDesHitoLong); break; } SqlDataReader dr; //Selecciono los documentos de un tipo de hito, para luego insertarlos en el otro tipo de hitos. if (sTipoHito == "HF") { dr = DOCUHE.Catalogo3(iCodHitoOriginal); } else { dr = DOCUH.Catalogo3(iCodHitoOriginal); } int nResul; while (dr.Read()) { long?idCS = null;//Id del documento en el Content-Server if (dr["t2_iddocumento"].ToString() != "") { idCS = long.Parse(dr["t2_iddocumento"].ToString()); } if (sTipoHito == "HF") { nResul = DOCUH.Insert(tr, iCodHito, dr["t367_descripcion"].ToString(), dr["t367_weblink"].ToString(), dr["t367_nombrearchivo"].ToString(), idCS, (bool)dr["t367_privado"], (bool)dr["t367_modolectura"], (bool)dr["t367_tipogestion"], int.Parse(Session["UsuarioActual"].ToString())); } else { nResul = DOCUHE.Insert(tr, iCodHito, dr["t366_descripcion"].ToString(), dr["t366_weblink"].ToString(), dr["t366_nombrearchivo"].ToString(), idCS, (bool)dr["t366_privado"], (bool)dr["t366_modolectura"], (bool)dr["t366_tipogestion"], int.Parse(Session["UsuarioActual"].ToString())); } } dr.Close(); dr.Dispose(); //Borro el hito de la tabla en la que estaba HITOPSP.Delete(tr, sTipoHito, iCodHitoOriginal); } #endregion } sTipoHito = aDatosHito[0]; sEstado = aDatosHito[7]; sHitoPE = aDatosHito[8]; if (sHitoPE == "T") { bHitoPE = true; } else { bHitoPE = false; } sAlerta = aDatosHito[9]; sCiclico = aDatosHito[10]; if ((sTipoHito == "HT") || (sTipoHito == "HM")) { iMargen = -1; } else { iMargen = 0; } if (sAlerta == "1") { bAlerta = true; } if (sCiclico == "1") { bCiclico = true; } HITOPSP.Update(tr, sTipoHito, iCodHito, sDesHito, sDesHitoLong, sEstado, iMargen, iOrden, bAlerta, bCiclico, iCodPE, dtFecha, bHitoPE); //Grabamos las tareas asociadas al hito (Si es hito de PE no porque ya lo hace el trigger) //if (sTareas != "" && !bHitoPE) if (sTareas != "") { string[] aTareas = Regex.Split(sTareas, @"##"); for (int i = 0; i < aTareas.Length - 1; i++) { sCad = aTareas[i]; sTipoLinea = sCad.Substring(0, 1); sCodTarea = quitaPuntos(sCad.Substring(1)); if (sTipoLinea == "D") {//Borrar hito-tarea HITOPSP.DeleteTarea(tr, iCodHito, int.Parse(sCodTarea)); } else { if (sTipoLinea == "I") {//Insertar hito-tarea HITOPSP.InsertTarea(tr, iCodHito, int.Parse(sCodTarea)); } } } } Conexion.CommitTransaccion(tr); //sResul = "OK@#@" + DateTime.Now.ToString() + "@#@" + Session["UsuarioActual"].ToString() + "@#@" + Session["APELLIDO1"].ToString() + " " + Session["APELLIDO2"].ToString() + ", " + Session["NOMBRE"].ToString(); sResul = "OK@#@" + iCodHito.ToString() + "@#@"; } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al grabar los datos del hito", ex); } finally { Conexion.Cerrar(oConn); } return(sResul); }
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); }
/// <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); } }
private string GetTareas(int idPSN, int idUser, string sEstados) { StringBuilder sb = new StringBuilder(); string sDesTipo, sDesc, sTarea, sMargen;//sCodPT, sFase, sActiv, sOrden, int iId = -1; sb.Append("<table id='tblTareas' class='texto' style='width:540px;'>"); sb.Append("<colgroup><col style='width:390px;'/><col style='width:30px;'/><col style='width:120px;'/></colgroup>"); SqlDataReader dr = EstrProy.EstructuraCompleta(idPSN, idUser, sEstados); while (dr.Read()) { iId++; sDesTipo = dr["Tipo"].ToString(); sDesc = HttpUtility.HtmlEncode(dr["Nombre"].ToString()); //sCodPT = dr["codPT"].ToString(); //sFase = dr["codFase"].ToString(); //sActiv = dr["codActiv"].ToString(); sTarea = dr["codTarea"].ToString(); //sOrden = dr["orden"].ToString(); sMargen = dr["margen"].ToString(); sb.Append("<tr style='height:20px;"); if (sDesTipo == "T") { sb.Append("' id='" + sTarea + "' "); } else { sb.Append("' id='" + iId.ToString() + "' "); } sb.Append("des='" + sDesc + "' "); sb.Append("mar='" + sMargen + "' "); if (sDesTipo == "P") { sb.Append(" nivel='1' desplegado='1' "); } else { sb.Append(" nivel='2' desplegado='1' "); } //sb.Append("tipo='" + sDesTipo + "' iPT='" + sCodPT + "' iF='" + sFase + "' iA='" + sActiv + "' "); sb.Append("tipo='" + sDesTipo + "' "); sb.Append("iT='" + sTarea + "'"); //sb.Append("iT='" + sTarea + "' iOrd='" + iId + "' iLP1='0' iLP2='0' "); //sb.Append("iPTn='" + sCodPT + "' iFn='" + sFase + "' iAn='" + sActiv + "' iTn='" + sTarea + "' "); //sb.Append("iOrdn='" + sOrden + "' "); sb.Append(" onclick='ms(this);'>"); sb.Append("<td>"); switch (sDesTipo) { case "P": case "F": case "A": //sb.Append("<img src='../../../../Images/plus.gif' style='margin-left:" + sMargen + "px;'>"); sb.Append("<img src='../../../../Images/minus.gif' onclick='mostrar(this);' style='cursor:pointer; margin-left:" + sMargen + "px;'>"); break; case "T": sb.Append("<img src='../../../../Images/imgTrans9x9.gif' style='margin-left:" + sMargen + "px;'>"); break; } sb.Append("</td>"); if (sDesTipo == "T") { sb.Append("<td><input type='checkbox' style='width:30px' class='checkTabla'></td>");//columna para marcar/desmarcar } else { sb.Append("<td></td>"); } sb.Append("<td title='" + dr["perfil"].ToString() + "'><nobr class='NBR W120'>" + dr["perfil"].ToString() + "</nobr></td>");//columna para el perfil sb.Append("</tr>"); } sb.Append("</tbody></table>"); dr.Close(); dr.Dispose(); return(sb.ToString()); }