public static void CambioEstructuraCasoA(SqlTransaction tr, int t305_idproyectosubnodo, int t303_idnodo_origen, int t303_idnodo_destino, bool bMantenerResponsables) { #region Obtención de subnodo para crear el proyectosubnodo int nCount = 0; int nCountManiobraTipo2 = 0; int idSubNodoAuxDestino = 0; int idSubNodoAuxManiobra = 0; int idSubNodoGrabar = 0; int nCountSubnodosNoManiobra = 0; int nResponsableSubNodo = 0; string sDenominacionNodo = ""; DataSet dsSubNodos = SUBNODO.CatalogoActivos(tr, t303_idnodo_destino, true); foreach (DataRow oSN in dsSubNodos.Tables[0].Rows) { if ((byte)oSN["t304_maniobra"] == 1) { nCount++; idSubNodoAuxManiobra = (int)oSN["t304_idsubnodo"]; nResponsableSubNodo = (int)oSN["t314_idusuario_responsable"]; sDenominacionNodo = oSN["t303_denominacion"].ToString(); } else if ((byte)oSN["t304_maniobra"] == 0) { idSubNodoAuxDestino = (int)oSN["t304_idsubnodo"]; nCountSubnodosNoManiobra++; nResponsableSubNodo = (int)oSN["t314_idusuario_responsable"]; sDenominacionNodo = oSN["t303_denominacion"].ToString(); } else { nCountManiobraTipo2++; } } if (nCountSubnodosNoManiobra == 1) //si solo hay un subnodo en el nodo, que la réplica se haga a ese subnodo. { idSubNodoGrabar = idSubNodoAuxDestino; } else { if (nCount == 0) { NODO oNodo = NODO.Select(tr, t303_idnodo_destino); //crear subnodo maniobra idSubNodoGrabar = SUBNODO.Insert(tr, "Proyectos a reasignar", t303_idnodo_destino, 0, true, 1, oNodo.t314_idusuario_responsable, null);// nResponsableSubNodo = oNodo.t314_idusuario_responsable; } else { if (nCount > 1) { dsSubNodos.Dispose(); throw (new Exception("El número de subnodos de maniobra es " + nCount.ToString() + " en el nodo " + sDenominacionNodo + ". Por favor avise al administrador.")); } if (dsSubNodos.Tables[0].Rows.Count - 1 - nCountManiobraTipo2 > 1 || dsSubNodos.Tables[0].Rows.Count - 1 - nCountManiobraTipo2 == 0) { idSubNodoGrabar = idSubNodoAuxManiobra; } else { idSubNodoGrabar = idSubNodoAuxDestino; } } } dsSubNodos.Dispose(); #endregion CAMBIOESTRUCTURAPSN.Paso01(tr, t305_idproyectosubnodo, idSubNodoGrabar, (bMantenerResponsables)? null:(int?)nResponsableSubNodo); CAMBIOESTRUCTURAPSN.Paso02(tr, t305_idproyectosubnodo, t303_idnodo_origen); CAMBIOESTRUCTURAPSN.Paso03(tr, t305_idproyectosubnodo, t303_idnodo_origen); CAMBIOESTRUCTURAPSN.Paso04(tr, t305_idproyectosubnodo, t303_idnodo_destino); CAMBIOESTRUCTURAPSN.Paso05(tr, t305_idproyectosubnodo, t303_idnodo_destino); CAMBIOESTRUCTURAPSN.Paso06(tr, t305_idproyectosubnodo, t303_idnodo_origen, t303_idnodo_destino); CAMBIOESTRUCTURAPSN.Paso07(tr, t305_idproyectosubnodo, t303_idnodo_origen, t303_idnodo_destino); }
/// <summary> /// Obtiene el subnodo por defecto de un nodo para crear un PE. /// Si no existe, crea uno de maniobra /// </summary> /// <param name="t303_idnodo"></param> /// <returns></returns> public static int GetSubNodoDefecto(int t303_idnodo) { #region Obtención de subnodo para crear el proyectosubnodo int nCount = 0; int nCountManiobraTipo2 = 0; int idSubNodoAuxDestino = 0; int idSubNodoAuxManiobra = 0; int idSubNodoGrabar = 0; int nCountSubnodosNoManiobra = 0; int nResponsableSubNodo = 0; string sDenominacionNodo = ""; DataSet dsSubNodos = null; try { dsSubNodos = SUBNODO.CatalogoActivos(null, t303_idnodo, true); foreach (DataRow oSN in dsSubNodos.Tables[0].Rows) { if ((byte)oSN["t304_maniobra"] == 1) { nCount++; idSubNodoAuxManiobra = (int)oSN["t304_idsubnodo"]; nResponsableSubNodo = (int)oSN["t314_idusuario_responsable"]; sDenominacionNodo = oSN["t303_denominacion"].ToString(); } else if ((byte)oSN["t304_maniobra"] == 0) { idSubNodoAuxDestino = (int)oSN["t304_idsubnodo"]; nCountSubnodosNoManiobra++; nResponsableSubNodo = (int)oSN["t314_idusuario_responsable"]; sDenominacionNodo = oSN["t303_denominacion"].ToString(); } else { nCountManiobraTipo2++; } } if (nCountSubnodosNoManiobra == 1) //si solo hay un subnodo en el nodo, que la réplica se haga a ese subnodo. { idSubNodoGrabar = idSubNodoAuxDestino; } else { if (nCount == 0) { NODO oNodo = NODO.Select(null, t303_idnodo); //crear subnodo maniobra idSubNodoGrabar = SUBNODO.Insert(null, "Proyectos a reasignar", t303_idnodo, 0, true, 1, oNodo.t314_idusuario_responsable, null); nResponsableSubNodo = oNodo.t314_idusuario_responsable; } else { //if (nCount > 1) //{ // dsSubNodos.Dispose(); // throw (new Exception("El número de subnodos de maniobra es " + nCount.ToString() + " en el nodo " + sDenominacionNodo + ". Por favor avise al administrador.")); //} if (dsSubNodos.Tables[0].Rows.Count - 1 - nCountManiobraTipo2 > 1 || dsSubNodos.Tables[0].Rows.Count - 1 - nCountManiobraTipo2 == 0) { idSubNodoGrabar = idSubNodoAuxManiobra; } else { idSubNodoGrabar = idSubNodoAuxDestino; } } } dsSubNodos.Dispose(); #endregion return(idSubNodoGrabar); } catch (Exception ex) { throw ex; } finally { if (dsSubNodos != null) { dsSubNodos.Dispose(); } } }