private string procesarCierre(string sOrigen, string sAnomesADM, string sPSN, string sCualidad, string sSegMesProy, string sIDProyecto, string sAnomes, string sIdSegMesProy) { string sResul = ""; string sEstadoMes = ""; bool bReintentar = true, bHayQueAjustar = false; decimal nImporteAjuste = 0; #region apertura de 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 try { //comprobar que no se hayan abierto meses anteriores. if (sOrigen == "ADM" || int.Parse(sAnomes) == PROYECTOSUBNODO.ObtenerPrimerMesAbierto(tr, int.Parse(sPSN))) { if (sCualidad == "C") { SEGMESPROYECTOSUBNODO.GenerarMesEnTransaccion(tr, int.Parse(sIDProyecto)); SqlDataReader dr = SEGMESPROYECTOSUBNODO.ObtenerAjuste(tr, int.Parse(sSegMesProy)); if (dr.Read()) { bHayQueAjustar = ((int)dr["ajuste"] == 1) ? true : false; nImporteAjuste = decimal.Parse(dr["Importe_Ajuste"].ToString()); } dr.Close(); dr.Dispose(); if (bHayQueAjustar) { //buscar el mes máximo para ese PSN y crear uno posterior para el ajuste int nUltAnomes = PROYECTOSUBNODO.ObtenerUltimoMes(tr, int.Parse(sPSN)); sEstadoMes = SEGMESPROYECTOSUBNODO.EstadoMesACrear(tr, int.Parse(sPSN), Fechas.AddAnnomes(nUltAnomes, 1)); int nNuevoSegMes = SEGMESPROYECTOSUBNODO.Insert(tr, int.Parse(sPSN), Fechas.AddAnnomes(nUltAnomes, 1), sEstadoMes, 0, 0, false, 0, 0); DATOECO.Insert(tr, nNuevoSegMes, Constantes.AjusteProdCont, "Ajuste de producción y contratación", nImporteAjuste, null, null, null); } } if (sOrigen == "ADM") { SEGMESPROYECTOSUBNODO.CerrarMesADM(tr, int.Parse(sPSN), int.Parse(sAnomesADM)); } else { SEGMESPROYECTOSUBNODO.Cerrar(tr, int.Parse(sSegMesProy)); } sResul = "OK@#@"; } else { sResul = "OK@#@NO"; } Conexion.CommitTransaccion(tr); if ((bool)Session["ALERTASPROY_ACTIVAS"] && sIdSegMesProy != "") { try { sIdSegMesProyGenerarDialogos = sIdSegMesProy; ThreadStart ts = new ThreadStart(GenerarDialogos); Thread workerThread = new Thread(ts); workerThread.Start(); //SEGMESPROYECTOSUBNODO.GenerarDialogosDeAlertas(sIdSegMesProy); } catch (Exception) { } } } catch (Exception ex) { Conexion.CerrarTransaccion(tr); sResul = "Error@#@" + Errores.mostrarError("Error al procesar el cierre.", ex, bReintentar); } finally { Conexion.Cerrar(oConn); } return(sResul); }