Ejemplo n.º 1
0
    private string Procesar(string sPorDeadLockTimeout, string strDatos) //, string sMantenerResponsables
    {
        string sResul = "", sArrastraProy = "";                          //, sToolTipResponsable = ""
        int    idContrato = 0;
        int    nNodoOrigen = 0, nNodoDestino = 0;
        bool   bErrorDeadLockTimeout = false;
        int    idFicepiEntrada       = (int)Session["IDFICEPI_ENTRADA"];

        try
        {
            string[] aDatos = Regex.Split(strDatos, "///");

            CAMBIOESTRUCTURACONTRATO_AUX.DeleteMyAll(null, (int)Session["IDFICEPI_ENTRADA"]);

            #region Aparca en tabla auxiliar los datos a procesar
            foreach (string oCont in aDatos)
            {
                if (oCont == "")
                {
                    continue;
                }
                string[] aCont = Regex.Split(oCont, "##");
                ///aCont[0] = idContrato
                ///aCont[1] = idNodo_origen
                ///aCont[2] = idNodo_destino
                ///aCont[3] = ArrastraProy
                ///aCont[4] = Gestor origen
                ///aCont[5] = Gestor destino
                ///aCont[6] = Arrastrar gestor
                ///aCont[7] = Cliente HERMES origen
                ///aCont[8] = Cliente HERMES destino
                ///aCont[9] = Arrastra cliente
                ///aCont[10] = Responsable origen
                ///aCont[11] = Responsable destino
                ///aCont[12] = Comercial origen
                ///aCont[13] = Comercial destino
                ///aCont[14] = procesado
                ///aCont[15] = codigo_excepcion
                ///aCont[16] = recuperado (era un contrato aparcado)

                bool?bProcesado = null;
                if (aCont[14] != "")
                {
                    bProcesado = (aCont[14] == "1") ? true : false;
                }

                CAMBIOESTRUCTURACONTRATO_AUX.Insertar(null, idFicepiEntrada, int.Parse(aCont[0]),
                                                      aCont[3], int.Parse(aCont[1]), int.Parse(aCont[2]), //Nodo
                                                      aCont[6], int.Parse(aCont[4]), int.Parse(aCont[5]), //Gestor
                                                      aCont[9], int.Parse(aCont[7]), int.Parse(aCont[8]), //Cliente
                                                      int.Parse(aCont[10]), int.Parse(aCont[11]),         //Responsable
                                                      int.Parse(aCont[12]), int.Parse(aCont[13]),         //Comercial
                                                      bProcesado);
            }
            #endregion

            #region Procesa los datos
            foreach (string oCont in aDatos)
            {
                try
                {
                    if (oCont == "")
                    {
                        continue;
                    }
                    string[] aCont = Regex.Split(oCont, "##");

                    idContrato    = int.Parse(aCont[0]);
                    nNodoOrigen   = int.Parse(aCont[1]);
                    nNodoDestino  = int.Parse(aCont[2]);
                    sArrastraProy = aCont[3];

                    //if (aCont[9] == "1" || aCont[1] == aCont[2])
                    if (aCont[14] == "1")
                    {
                        //CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idContrato, nNodoDestino, aCont[3], true, "", idFicepiEntrada, null);
                        CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, true, null, "");
                        continue;
                    }
                    if (nNodoOrigen == nNodoDestino)
                    {
                        string sAux = "El " + Estructura.getDefCorta(Estructura.sTipoElem.NODO) + " origen y el destino no pueden ser el mismo";
                        CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, false, 1, sAux);
                        continue;
                    }

                    #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

                    #region Cambio de nodo
                    if (nNodoOrigen != nNodoDestino)
                    {
                        if (sArrastraProy != "")
                        {
                            DataSet dsPSN = PROYECTOSUBNODO.ObtenerContratantesCambioEstructuraDS(tr, idContrato, sArrastraProy);
                            foreach (DataRow oPSN in dsPSN.Tables[0].Rows)
                            {
                                CAMBIOESTRUCTURAPSN.CambiarEstructuraAProyecto(tr, (int)oPSN["t305_idproyectosubnodo"],
                                                                               (int)oPSN["t303_idnodo"], nNodoDestino, true);
                                //(sMantenerResponsables == "1") ? true : false);
                            }
                            dsPSN.Dispose();
                        }

                        //CONTRATO.ModificarNodo(tr, idContrato, nNodoDestino);
                        CONTRATO.Modificar(tr, idContrato, nNodoDestino, null, null, null, null);
                    }
                    #endregion
                    #region Gestor
                    if (aCont[4] != aCont[5])
                    {
                        if (aCont[6] != "")//Arrastra Gestor de producción como responsable de proyecto
                        {
                            CONTRATO.SetResponsableProyectos(tr, idContrato, int.Parse(aCont[5]));
                        }

                        CONTRATO.Modificar(tr, idContrato, null, int.Parse(aCont[5]), null, null, null);
                    }
                    #endregion
                    #region Cliente
                    if (aCont[7] != aCont[8])
                    {
                        if (aCont[9] != "")//Arrastra Cliente como cliente de proyecto
                        {
                            CONTRATO.SetClienteProyectos(tr, idContrato, int.Parse(aCont[8]));
                        }

                        CONTRATO.Modificar(tr, idContrato, null, null, int.Parse(aCont[8]), null, null);
                    }
                    #endregion
                    #region Responsable de contrato
                    if (aCont[10] != aCont[11])
                    {
                        CONTRATO.Modificar(tr, idContrato, null, null, null, int.Parse(aCont[11]), null);
                    }
                    #endregion
                    #region Comercial HERMES
                    if (aCont[12] != aCont[13])
                    {
                        CONTRATO.Modificar(tr, idContrato, null, null, null, null, int.Parse(aCont[13]));
                    }
                    #endregion

                    //update proceso OK
                    //CAMBIOESTRUCTURACONTRATO_AUX.Modificar(tr, idContrato, nNodoDestino, aCont[3], true, "", idFicepiEntrada, null);
                    CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, true, null, "");

                    //throw (new Exception("Error tonto"));

                    //Si es un contrato recuperado lo eliminamos de los aparcados
                    if (aCont[16] == "S")
                    {
                        CAMBIOESTRUCTURACONTRATO.Delete(tr, idContrato);
                    }

                    Conexion.CommitTransaccion(tr);
                }
                catch (Exception ex)
                {
                    Conexion.CerrarTransaccion(tr);
                    //update proceso KO

                    int?nError = null;
                    if (ex.GetType().ToString() == "System.Data.SqlClient.SqlException")
                    {
                        nError = ((System.Data.SqlClient.SqlException)ex).Number;
                        if (nError == 1505 || nError == -2) //DeadLock o Timeout
                        {
                            bErrorDeadLockTimeout = true;
                        }
                    }

                    //CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idContrato, nNodoDestino, sArrastraProy, false, ex.Message, idFicepiEntrada, nError);
                    CAMBIOESTRUCTURACONTRATO_AUX.Modificar(null, idFicepiEntrada, idContrato, false, nError, ex.Message);

                    if (bErrorDeadLockTimeout)
                    {
                        sResul = "OK@#@";
                    }
                    else
                    {
                        sResul = "Error@#@" + Errores.mostrarError("Error al realizar el cambio de estructura de contrato.", ex);
                    }
                }
                finally
                {
                    Conexion.Cerrar(oConn);
                }
            }// fin foreach
            #endregion

            #region Recupera de la tabla auxiliar los datos procesados
            StringBuilder sb = new StringBuilder();
            SqlDataReader dr = CAMBIOESTRUCTURACONTRATO_AUX.CatalogoDestino(null, idFicepiEntrada);

            sb.Append("<table id='tblDatos2' class='texto MM' style='WIDTH: 580px; table-layout:fixed;' cellspacing='0' cellpadding='0' border='0'>");
            sb.Append("<colgroup><col style='width:160px;' /><col style='width:20px;' /><col style='width:80px;' />");
            sb.Append("<col style='width:20px;' /><col style='width:80px;' /><col style='width:20px;' /><col style='width:80px;' />");
            sb.Append("<col style='width:100px;' /><col style='width:20px;' /></colgroup>");
            sb.Append("<tbody>");
            while (dr.Read())
            {
                sb.Append("<tr id='" + dr["t306_idcontrato"].ToString() + "' ");
                sb.Append("nodo_origen='" + dr["t303_idnodo_origen"].ToString() + "' ");
                sb.Append("nodo_destino='" + dr["t303_idnodo_destino"].ToString() + "' ");
                sb.Append("arrastraproy='" + dr["t778_arrastraproy"].ToString() + "' ");
                sb.Append("arrastra_gestor='" + dr["t778_arrastra_gestor"].ToString() + "' ");
                sb.Append("arrastra_cliente='" + dr["t778_arrastra_cliente"].ToString() + "' ");
                sb.Append("responsable_origen='" + dr["t314_idusuario_responsable_origen"].ToString() + "' ");
                sb.Append("resp_destino='" + dr["t314_idusuario_responsable_destino"].ToString() + "' ");
                sb.Append("nom_responsable='" + dr["Responsable"].ToString() + "' ");
                sb.Append("gestor_origen='" + dr["t314_idusuario_gestorprod_origen"].ToString() + "' ");
                sb.Append("gest_destino='" + dr["t314_idusuario_gestorprod_destino"].ToString() + "' ");
                sb.Append("cliente_origen='" + dr["t302_idcliente_origen"].ToString() + "' ");
                sb.Append("clie_destino='" + dr["t302_idcliente_destino"].ToString() + "' ");
                sb.Append("comercial_origen='" + dr["t314_idusuario_comercialhermes_origen"].ToString() + "' ");
                sb.Append("come_destino='" + dr["t314_idusuario_comercialhermes_destino"].ToString() + "' ");

                if (dr["t778_procesado"].ToString() == "")
                {
                    sb.Append("procesado='' ");
                }
                else if ((bool)dr["t778_procesado"])
                {
                    sb.Append("procesado='1' ");
                }
                else
                {
                    sb.Append("procesado='0' ");
                }

                sb.Append("excepcion=\"" + Utilidades.escape(dr["t778_excepcion"].ToString()) + "\" ");
                sb.Append("codigo_excepcion='" + dr["t778_codigoexcepcion"].ToString() + "' ");

                sb.Append("onclick='mm(event)' onmousedown='DD(event)' ");
                sb.Append("style='height:20px' >");
                //Contrato
                sb.Append("<td style='padding-left:3px;'><nobr class='NBR W160' style='noWrap:true;'>" + int.Parse(dr["t306_idcontrato"].ToString()).ToString("#,###") + " - " + dr["t377_denominacion"].ToString().Replace((char)34, (char)39) + "</nobr></td>");
                //Nodo
                sb.Append("<td></td>");
                sb.Append("<td><nobr class='NBR W80' style='noWrap:true;'>" + dr["t303_denominacion"].ToString() + "</nobr></td>");
                //Gestor
                sb.Append("<td></td>");
                sb.Append("<td><nobr class='NBR W80' style='noWrap:true;'>" + dr["Gestor"].ToString() + "</nobr></td>");
                //Cliente
                sb.Append("<td></td>");
                sb.Append("<td><nobr class='NBR W80' style='noWrap:true;'>" + dr["t302_denominacion"].ToString() + "</nobr></td>");
                //Comercial
                sb.Append("<td><nobr class='NBR W100' style='noWrap:true;'>" + dr["Comercial"].ToString() + "</nobr></td>");
                //Resultado
                sb.Append("<td></td>");
                sb.Append("</tr>");
            }

            dr.Close();
            dr.Dispose();
            sb.Append("</tbody>");
            sb.Append("</table>");
            #endregion

            sResul = "OK@#@" + sb.ToString() + "@#@" + ((bErrorDeadLockTimeout) ? "1" : "0");
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al realizar el cambio de estructura de contrato.", ex);
        }
        return(sResul);
    }