private string procesarReplica(string nProyecto, string nPSN, string sProy, string strDatos)
    {
        string sResul = "";
        //DataSet ds;
        //int nCount = 0, idNodoAuxDestino=0, idNodoAuxManiobra = 0, idNodoAuxManiobra3=0, nCountSubnodosNoManiobra = 0;
        int  idSubNodoGrabar = 0;
        int  nAux            = 0;
        int  idNodo          = -1;
        int  nResponsablePSN = 0;
        bool bReintentar     = true;

        #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
        {
            string[] aNodo = Regex.Split(strDatos, "///");

            foreach (string oNodo in aNodo)
            {
                if (oNodo == "")
                {
                    continue;
                }

                //nCount = 0;
                //idNodoAuxManiobra = 0;
                //idNodoAuxManiobra3 = 0;
                //nCountSubnodosNoManiobra = 0;
                //idNodoAuxDestino = 0;
                idSubNodoGrabar = 0;

                string[] aValores = Regex.Split(oNodo, "##");
                //0. idNodo
                //1. tiporeplica
                //2. idGestor
                idNodo = int.Parse(aValores[0]);
                if (!PROYECTOSUBNODO.ExisteProyectoSubNodo(tr, int.Parse(nProyecto), idNodo))
                {
                    nResponsablePSN = (aValores[2] == "") ? 0 : int.Parse(aValores[2]);
                    #region Cálculo de subnodo destino OLD

                    /*
                     * nCount = 0;
                     * ds = PROYECTOSUBNODO.ObtenerSubnodosParaReplicar(tr, int.Parse(aValores[0]));
                     * foreach (DataRow oFila in ds.Tables[0].Rows)
                     * {
                     *  //Maniobra=3 es el defecto para replicar
                     *  if ((byte)oFila["t304_maniobra"] == 3)
                     *  {
                     *      idNodoAuxManiobra3 = (int)oFila["t304_idsubnodo"];
                     *  }
                     *  else
                     *  {
                     *      if ((byte)oFila["t304_maniobra"] == 1)
                     *      {
                     *          nCount++;
                     *          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 (idNodoAuxManiobra3 != 0)
                     *  {
                     *      idSubNodoGrabar = idNodoAuxManiobra3;
                     *  }
                     *  else
                     *  {
                     *      if (nCount == 0)
                     *      {
                     *          NODO oNodo2 = NODO.SelectEnTransaccion(tr, int.Parse(aValores[0]));
                     *          nResponsablePSN = oNodo2.t314_idusuario_responsable;
                     *          //crear subnodo maniobra
                     *          idSubNodoGrabar = SUBNODO.Insert(tr, "Proyectos a reasignar", int.Parse(aValores[0]), 0, true, 1, oNodo2.t314_idusuario_responsable, null);
                     *      }
                     *      else
                     *      {
                     *          if (nCount > 1)
                     *          {
                     *              bReintentar = false;
                     *              ds.Dispose();
                     *              throw (new Exception("El número de subnodos de maniobra es " + nCount.ToString() + " en el nodo " + aValores[0] + ". 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();
                     */
                    #endregion
                    idSubNodoGrabar = SUPER.Capa_Negocio.PROYECTOSUBNODO.ObtenerSubnodoDestinoReplica(tr, idNodo);

                    if (nResponsablePSN == 0)
                    {
                        NODO oNodo3 = NODO.SelectEnTransaccion(tr, idNodo);
                        nResponsablePSN = oNodo3.t314_idusuario_responsable;
                    }
                    nAux = PROYECTOSUBNODO.Insert(tr, int.Parse(nProyecto), idSubNodoGrabar, false, aValores[1], false, nResponsablePSN,
                                                  sProy, "X", "X", false, false, false, false, false, "", "", "", null, null, null, null,
                                                  null, null, false, 0);
                }
            }

            SEGMESPROYECTOSUBNODO.GenerarMesEnTransaccion(tr, int.Parse(nProyecto));

            Conexion.CommitTransaccion(tr);

            sResul = "OK@#@";
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al procesar la réplica del proyecto.", ex, bReintentar);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }

        return(sResul);
    }
예제 #2
0
    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);
    }