public static void CambioEstructuraCasoB(SqlTransaction tr, int t305_idproyectosubnodo_contratante, int t303_idnodo_destino, int t305_idproyectosubnodo_replicaSG) { int nSMPSN_contratante = 0; string sEstadoMes = ""; DataSet dsDatoEco = CAMBIOESTRUCTURAPSN.Paso08(tr, t305_idproyectosubnodo_replicaSG); foreach (DataRow oDE in dsDatoEco.Tables[0].Rows) { //2ºComprobar si existe mes para el nodo destino nSMPSN_contratante = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, t305_idproyectosubnodo_contratante, (int)oDE["t325_anomes"]); if (nSMPSN_contratante == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, t305_idproyectosubnodo_contratante, (int)oDE["t325_anomes"]); nSMPSN_contratante = SEGMESPROYECTOSUBNODO.Insert(tr, t305_idproyectosubnodo_contratante, (int)oDE["t325_anomes"], sEstadoMes, 0, 0, false, 0, 0); } CAMBIOESTRUCTURAPSN.Paso09(tr, (int)oDE["t376_iddatoeco"], nSMPSN_contratante, (decimal)oDE["t376_importe_mb"]); //CAMBIOESTRUCTURAPSN.Paso10(tr, t305_idproyectosubnodo_contratante, t303_idnodo_destino); } dsDatoEco.Dispose(); CAMBIOESTRUCTURAPSN.Paso10(tr, t305_idproyectosubnodo_contratante, t303_idnodo_destino); PROYECTOSUBNODO.Delete(tr, t305_idproyectosubnodo_replicaSG); }
public static string Procesar(string sRegistros, string strDatos) { string sResul = "", sEstadoMes = ""; int nPSN_C = 0, nPSN_J = 0, nPSN_P = 0, nSegMesProy = 0; int nIDEmpresaNodoProyecto_C = 0; int nNodoUsuario = 0, nEmpresaNodoUsuario = 0, nNodo_C = 0, nNodo_J = 0, nNodo_P = 0; decimal nTipoCambio_C = 0, nTipoCambio_J = 0, nTipoCambio_P = 0; SqlConnection oConn = null; SqlTransaction tr = null; bool bErrorControlado = false; string[] aIncentivos = Regex.Split(strDatos, "#reg#"); #region Abrir conexión y transacción try { oConn = Conexion.Abrir(); tr = Conexion.AbrirTransaccionSerializable(oConn); } catch { if (oConn.State == ConnectionState.Open) { Conexion.Cerrar(oConn); } throw (new Exception("Error al abrir la conexión.")); } #endregion try { //inserto los registros seleccionados en la T726_INCENTIVOSPRODUCTIVIDAD Capa_Datos.INCENTIVOSPRODUCTIVIDAD.Insertar(tr, sRegistros); //Trato los registros seleccionados int i = 0; foreach (string oIncentivo in aIncentivos) { i++; if (oIncentivo == "") { continue; } string[] aDatos = Regex.Split(oIncentivo, "#sep#"); #region Datos Incentivo //aDatos[0] = id incentivo //0 //aDatos[1] = idusuario //1 //aDatos[2] = idnodo_usuario //2 //aDatos[3] = importe //3 //aDatos[4] = idproyecto //4 //aDatos[5] = anomes //5 //aDatos[6] = Profesional //6 //aDatos[7] = Denominación proyecto //7 //aDatos[8] = importe SS //8 #endregion #region inicializar variables nPSN_C = 0; nPSN_J = 0; nPSN_P = 0; nSegMesProy = 0; nIDEmpresaNodoProyecto_C = 0; nNodoUsuario = 0; nEmpresaNodoUsuario = 0; nNodo_C = 0; nNodo_J = 0; nNodo_P = 0; nTipoCambio_C = 0; nTipoCambio_J = 0; nTipoCambio_P = 0; #endregion DataSet ds = Capa_Datos.INCENTIVOSPRODUCTIVIDAD.ObtenerInstanciasProyecto(tr, int.Parse(aDatos[4]), int.Parse(aDatos[1]), int.Parse(aDatos[5])); foreach (DataRow oFila in ds.Tables[0].Rows) { switch (oFila["t305_cualidad"].ToString()) { case "C": nPSN_C = (int)oFila["t305_idproyectosubnodo"]; nNodo_C = (int)oFila["t303_idnodo"]; nIDEmpresaNodoProyecto_C = (int)oFila["t313_idempresa_nodo"]; nTipoCambio_C = decimal.Parse(oFila["t699_tipocambio"].ToString()); break; case "J": nPSN_J = (int)oFila["t305_idproyectosubnodo"]; nNodo_J = (int)oFila["t303_idnodo"]; nTipoCambio_J = decimal.Parse(oFila["t699_tipocambio"].ToString()); break; case "P": nPSN_P = (int)oFila["t305_idproyectosubnodo"]; nNodo_P = (int)oFila["t303_idnodo"]; nTipoCambio_P = decimal.Parse(oFila["t699_tipocambio"].ToString()); break; } if (nNodoUsuario == 0) { nNodoUsuario = (int)oFila["t303_idnodo_usuario"]; } if (nEmpresaNodoUsuario == 0) { nEmpresaNodoUsuario = (int)oFila["t313_idempresa_nodousuario"]; } } if (nPSN_C == 0) { sResul = "Instancia contratante del proyecto económico no existente"; bErrorControlado = true; throw (new Exception(sResul)); } if (nPSN_P != 0) //Réplica con gestión { nSegMesProy = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, nPSN_P, int.Parse(aDatos[5])); if (nSegMesProy == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, nPSN_P, int.Parse(aDatos[5])); nSegMesProy = SEGMESPROYECTOSUBNODO.Insert(tr, nPSN_P, int.Parse(aDatos[5]), sEstadoMes, 0, 0, false, 0, 0); } DATOECO.Insert(tr, nSegMesProy, Constantes.nIdClaseProductividad, Utilidades.unescape(aDatos[6]), decimal.Parse(aDatos[3]) * nTipoCambio_P, null, null, 4); DATOECO.Insert(tr, nSegMesProy, Constantes.nIdClaseProductividadSS, Utilidades.unescape(aDatos[6]), decimal.Parse(aDatos[8]) * nTipoCambio_P, null, null, 4); } else if (nNodo_C == nNodoUsuario) //El usuario pertenece a la Contratante { nSegMesProy = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, nPSN_C, int.Parse(aDatos[5])); if (nSegMesProy == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, nPSN_C, int.Parse(aDatos[5])); nSegMesProy = SEGMESPROYECTOSUBNODO.Insert(tr, nPSN_C, int.Parse(aDatos[5]), sEstadoMes, 0, 0, false, 0, 0); } DATOECO.Insert(tr, nSegMesProy, Constantes.nIdClaseProductividad, Utilidades.unescape(aDatos[6]), decimal.Parse(aDatos[3]) * nTipoCambio_C, null, null, 4); DATOECO.Insert(tr, nSegMesProy, Constantes.nIdClaseProductividadSS, Utilidades.unescape(aDatos[6]), decimal.Parse(aDatos[8]) * nTipoCambio_C, null, null, 4); } else //Réplica sin gestión { //Para la réplica sin gestión if (nNodo_J == 0) //no existe la réplica sin gestión, por lo que hay que crearla. { #region Creación de la instancia de proyecto int nCountManiobraTipo1 = 0, idNodoAuxManiobra = 0, nCountSubnodosNoManiobra = 0, idNodoAuxDestino = 0, idSubNodoGrabar = 0; int nResponsablePSN = 0; DataSet dsSubnodos = PROYECTOSUBNODO.ObtenerSubnodosParaReplicar(tr, nNodoUsuario); foreach (DataRow oFila in dsSubnodos.Tables[0].Rows) { if ((byte)oFila["t304_maniobra"] == 1) { nCountManiobraTipo1++; idNodoAuxManiobra = (int)oFila["t304_idsubnodo"]; } else { nCountSubnodosNoManiobra++; idNodoAuxDestino = (int)oFila["t304_idsubnodo"]; } } if (nCountSubnodosNoManiobra == 1) //si solo hay un subnodo en el nodo, que la réplica se haga a ese subnodo. { idSubNodoGrabar = idNodoAuxDestino; } else { if (nCountManiobraTipo1 == 0) { NODO oNodo2 = NODO.SelectEnTransaccion(tr, nNodoUsuario); nResponsablePSN = oNodo2.t314_idusuario_responsable; //crear subnodo maniobra idSubNodoGrabar = SUBNODO.Insert(tr, "Proyectos a reasignar", nNodoUsuario, 0, true, 1, oNodo2.t314_idusuario_responsable, null); } else { if (nCountManiobraTipo1 > 1) { ds.Dispose(); throw (new Exception("El número de subnodos de maniobra es " + nCountManiobraTipo1.ToString() + " en el nodo " + nNodoUsuario.ToString() + ". Por favor avise al administrador.")); } if (ds.Tables[0].Rows.Count - 1 > 1 || ds.Tables[0].Rows.Count - 1 == 0) { idSubNodoGrabar = idNodoAuxManiobra; } else { idSubNodoGrabar = idNodoAuxDestino; } } } ds.Dispose(); if (nResponsablePSN == 0) { NODO oNodo3 = NODO.SelectEnTransaccion(tr, nNodoUsuario); nResponsablePSN = oNodo3.t314_idusuario_responsable; } if (nTipoCambio_J == 0) { //hay que obtener el tipo de cambio de la moneda por defecto del nodo en el mes del incentivo. nTipoCambio_J = NODO.getTipocambioMonedaNodoMes(tr, nNodoUsuario, int.Parse(aDatos[5])); } nPSN_J = PROYECTOSUBNODO.Insert(tr, int.Parse(aDatos[4]), idSubNodoGrabar, false, "J", false, nResponsablePSN, Utilidades.unescape(aDatos[7]), "X", "X", false, false, false, false, false, "", "", "", null, null, null, null, null, null, false, 0); #endregion } nSegMesProy = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, nPSN_J, int.Parse(aDatos[5])); if (nSegMesProy == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, nPSN_J, int.Parse(aDatos[5])); nSegMesProy = SEGMESPROYECTOSUBNODO.Insert(tr, nPSN_J, int.Parse(aDatos[5]), sEstadoMes, 0, 0, false, 0, 0); } DATOECO.Insert(tr, nSegMesProy, Constantes.nIdClaseProductividad, Utilidades.unescape(aDatos[6]), decimal.Parse(aDatos[3]) * nTipoCambio_J, null, null, 4); DATOECO.Insert(tr, nSegMesProy, Constantes.nIdClaseProductividadSS, Utilidades.unescape(aDatos[6]), decimal.Parse(aDatos[8]) * nTipoCambio_J, null, null, 4); //Para la contratante (se añade el nodo destino) nSegMesProy = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, nPSN_C, int.Parse(aDatos[5])); if (nSegMesProy == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, nPSN_C, int.Parse(aDatos[5])); nSegMesProy = SEGMESPROYECTOSUBNODO.Insert(tr, nPSN_C, int.Parse(aDatos[5]), sEstadoMes, 0, 0, false, 0, 0); } DATOECO.Insert(tr, nSegMesProy, (nIDEmpresaNodoProyecto_C == nEmpresaNodoUsuario) ? 4 : 6, Utilidades.unescape(aDatos[6]), (decimal.Parse(aDatos[3]) + decimal.Parse(aDatos[8])) * nTipoCambio_C, nNodoUsuario, null, 4); } Capa_Datos.INCENTIVOSPRODUCTIVIDAD.Registrar(tr, int.Parse(aDatos[0])); } Conexion.CommitTransaccion(tr); } catch (Exception ex) { Conexion.CerrarTransaccion(tr); if (bErrorControlado) { sResul = ex.Message; } else { sResul = Errores.mostrarError("Error al procesar.", ex); } } finally { Conexion.Cerrar(oConn); if (sResul != "") { if (bErrorControlado) { sResul = "ErrorControlado##EC##" + sResul; } throw (new Exception(sResul)); } } return(""); }
public static void CambioEstructuraCasoC(SqlTransaction tr, int t305_idproyectosubnodo_contratante, int t303_idnodo_destino, int t305_idproyectosubnodo_replicaCG) { int nSMPSN_contratante = 0; string sEstadoMes = ""; // Aplica la moneda del contratante al presupuesto de la estructura técnica. Aplica el PSN del contratante a los proyectos técnicos CAMBIOESTRUCTURAPSN.Paso11(tr, t305_idproyectosubnodo_contratante, t305_idproyectosubnodo_replicaCG); //Coge los consumos de la replica DataSet dsDatoEco = CAMBIOESTRUCTURAPSN.Paso08(tr, t305_idproyectosubnodo_replicaCG); foreach (DataRow oDE in dsDatoEco.Tables[0].Rows) { //2ºComprobar si existe mes para el nodo destino nSMPSN_contratante = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, t305_idproyectosubnodo_contratante, (int)oDE["t325_anomes"]); if (nSMPSN_contratante == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, t305_idproyectosubnodo_contratante, (int)oDE["t325_anomes"]); nSMPSN_contratante = SEGMESPROYECTOSUBNODO.Insert(tr, t305_idproyectosubnodo_contratante, (int)oDE["t325_anomes"], sEstadoMes, 0, 0, false, 0, 0); } //Actualiza el importe por si ha habido cambio de moneda CAMBIOESTRUCTURAPSN.Paso09(tr, (int)oDE["t376_iddatoeco"], nSMPSN_contratante, (decimal)oDE["t376_importe_mb"]); //CAMBIOESTRUCTURAPSN.Paso10(tr, t305_idproyectosubnodo_contratante, t303_idnodo_destino); } dsDatoEco.Dispose(); //Borra los consumos de la contratante en el CR de destino CAMBIOESTRUCTURAPSN.Paso10(tr, t305_idproyectosubnodo_contratante, t303_idnodo_destino); //Reasigno las notas GASVI CAMBIOESTRUCTURAPSN.Paso17(tr, t305_idproyectosubnodo_contratante, t305_idproyectosubnodo_replicaCG); //Guardamos en una lista los usuarios asignados a la replica con gestion List <USUARIOPROYECTOSUBNODO> lUsusariosReplica = CAMBIOESTRUCTURAPSN.Paso12(tr, t305_idproyectosubnodo_contratante, t305_idproyectosubnodo_replicaCG); //Guardo en un dataset los consumos de la replicada DataSet dsCPMCE = CAMBIOESTRUCTURAPSN.Paso13(tr, t305_idproyectosubnodo_replicaCG); //Borro rl proyecto replicado PROYECTOSUBNODO.Delete(tr, t305_idproyectosubnodo_replicaCG); //Recojo los usuarios del proyecto replicado con gestión que he almacenado previamente y los inserto en la contratante //Es necesario hacerlo así porque mientras exista la instancia replicada no permite insertar usuarios en la contratante CAMBIOESTRUCTURAPSN.Paso16(tr, t305_idproyectosubnodo_contratante, lUsusariosReplica); //Una vez que tengo asignados los usuarios a la contratante ya puedo pasar los consumos int?t303_idnodo_usuariomes = null; int?t313_idempresa_nodomes = null; foreach (DataRow oCPM in dsCPMCE.Tables[0].Rows) { nSMPSN_contratante = SEGMESPROYECTOSUBNODO.ExisteSegMesProy(tr, t305_idproyectosubnodo_contratante, (int)oCPM["t325_anomes"]); if (nSMPSN_contratante == 0) { sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, t305_idproyectosubnodo_contratante, (int)oCPM["t325_anomes"]); nSMPSN_contratante = SEGMESPROYECTOSUBNODO.Insert(tr, t305_idproyectosubnodo_contratante, (int)oCPM["t325_anomes"], sEstadoMes, 0, 0, false, 0, 0); } decimal dAux = decimal.Parse(oCPM["t378_costeunitariorep_mb"].ToString()); if (oCPM["t303_idnodo_usuariomes"].ToString() != "") { t303_idnodo_usuariomes = (int)oCPM["t303_idnodo_usuariomes"]; } else { t303_idnodo_usuariomes = null; } if (oCPM["t313_idempresa_nodomes"].ToString() != "") { t313_idempresa_nodomes = (int)oCPM["t313_idempresa_nodomes"]; } else { t313_idempresa_nodomes = null; } //CAMBIOESTRUCTURAPSN.Paso15(tr, (int)oCPM["t325_idsegmesproy"], (int)oCPM["t314_idusuario"], nSMPSN_contratante, dAux, dAux, // float.Parse(oCPM["t378_unidades"].ToString()), (int)oCPM["t303_idnodo_usuariomes"], (int)oCPM["t313_idempresa_nodomes"]); CAMBIOESTRUCTURAPSN.Paso15(tr, (int)oCPM["t314_idusuario"], nSMPSN_contratante, dAux, dAux, float.Parse(oCPM["t378_unidades"].ToString()), t303_idnodo_usuariomes, t313_idempresa_nodomes); } dsCPMCE.Dispose(); }