Example #1
0
    private void AsociarTareasHitos(SqlTransaction tr, int nT305IdProy, int nPT, int nFase, int nActiv, int nTarea, int nHito, int nMargen)
    {
        string sTipo   = "";
        int    nCodigo = -1;

        try
        {
            #region 1º Identificar el tipo de Hito
            if (nMargen == 0)
            {
                sTipo   = "PE"; //Hito de proyecto económico
                nCodigo = nT305IdProy;
            }
            else
            {
                if (nTarea != -1)
                {
                    sTipo   = "T"; //Hito de tarea
                    nCodigo = nTarea;
                }
                else
                {
                    if (nPT != -1 && nFase == -1 && nActiv == -1) // && nTarea == -1
                    {
                        sTipo   = "PT";                           //Hito de proyecto técnico
                        nCodigo = nPT;
                    }
                    else if (nFase != -1 && nActiv == -1) // && nTarea == -1
                    {
                        sTipo   = "F";                    //Hito de Fase
                        nCodigo = nFase;
                    }
                    else if (nActiv != -1) // && nTarea == -1
                    {
                        sTipo   = "A";     //Hito de Actividad
                        nCodigo = nActiv;
                    }
                }
            }
            #endregion

            ////2º Se borran las tareas que pudiera haber ligadas al hito
            //EstrProy.BorrarTareasHito(tr, nHito);

            //3º Se asocian al hito las tareas que correspondan al "tipo" (nivel) del hito.
            //EstrProy.AsociarTareasHito(tr, sTipo, nHito, nCodigo, short.Parse(Session["NodoActivo"].ToString()));
            EstrProy.AsociarTareasHito(tr, sTipo, nHito, nCodigo);
        }
        catch (Exception ex)
        {
            //Conexion.CerrarTransaccion(tr);
            Errores.mostrarError("Error al grabar las tareas asociadas a los hitos", ex);
        }
    }
    public bool bTieneConsumosPE(int nCodPE)
    {
        bool bConsumos;

        try
        {
            bConsumos = EstrProy.ExistenConsumosPE(null, nCodPE);
        }
        catch (Exception)
        {
            bConsumos = false;
        }
        return(bConsumos);
    }
Example #3
0
        public string bTieneConsumosPT(int nCodPT)
        {
            string strReturn = "0";

            try
            {
                bool bConsumos = EstrProy.ExistenConsumosPT(null, nCodPT);
                if (bConsumos)
                {
                    strReturn = "1";
                }
            }
            catch (Exception)
            {
                strReturn = "Error";
            }

            return(strReturn);
        }
    private string Permiso(string sT305IdProy, string sCodUne, string sNumProyEco, string sIdTarea)
    {
        string sResul = "N", sEstProy;

        try
        {
            //1º miramos si hay acceso sobre la tarea
            string sUserAct = Session["UsuarioActual"].ToString();
            int    iUserAct = int.Parse(sUserAct);
            sIdTarea = sIdTarea.Replace(".", "");
            sResul   = TAREAPSP.getAcceso(null, int.Parse(sIdTarea), iUserAct);
            //N-> no hay acceso R-> acceso en lectura W-> acceso en escritura
            if (sResul != "N")
            {
                //Miramos el estado del proyecto economico. Por que si está cerrado aunque tenga permiso solo se podrá leer
                sEstProy = EstrProy.estadoProyecto(sT305IdProy);
                if (sEstProy == "C" || sEstProy == "H")
                {
                    if (sResul == "W")
                    {
                        sResul = "R";
                    }
                }
                if (sResul == "R")
                {
                    ModoLectura.Poner(this.Controls);
                }
            }
            gsAcceso            = sResul;
            this.hdnAcceso.Text = sResul;
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al obtener permisos sobre la tarea " + sIdTarea, ex);
        }
        //return "OK@#@" + sResul;
        return(sResul);
    }
Example #5
0
    protected string Grabar(string strDatosHito, string sDatosBorrado, string sTareas)
    {
        string sResul = "", sTipoHito, sDesHito, sDesHitoLong, sFecha, sEstado, sAlerta, sCiclico, sAccion, sTipoLinea, sCad, sCodTarea, sHitoPE;

        string[] aDatosHito;
        int      iCodHito, iCodPE, iMargen, iCodHitoOriginal;
        short    iOrden;//iCodCR
        bool     bAlerta = false, bCiclico = false, bHitoPE;
        DateTime dtFecha = DateTime.Now;

        try
        {
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccionSerializable(oConn);
        }
        catch (Exception ex)
        {
            sResul = "Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex);
            return(sResul);
        }
        try
        {
            aDatosHito = Regex.Split(strDatosHito, "##");
            iCodHito   = int.Parse(aDatosHito[1]);
            //iCodCR = short.Parse(aDatosHito[2]);
            iCodPE       = int.Parse(aDatosHito[3]);
            sDesHito     = Utilidades.unescape(aDatosHito[4]);
            sDesHitoLong = Utilidades.unescape(aDatosHito[5]);
            sFecha       = aDatosHito[6];
            if (sFecha != "")
            {
                dtFecha = DateTime.Parse(sFecha);
            }
            iOrden = short.Parse(aDatosHito[11]);

            //Al grabar un hito puede ocurrir que se haya cambiado el tipo de hito lo que implica que antes de grabar
            //hay que borrar de una tabla e insertar en otra
            if (sDatosBorrado != "")
            {
                #region Borrado
                string[] aDatosBorrado = Regex.Split(sDatosBorrado, "##");
                sAccion = aDatosBorrado[0];
                if (sAccion == "borrar")
                {
                    sTipoHito        = aDatosBorrado[1];
                    iCodHito         = int.Parse(aDatosBorrado[2]);
                    iCodHitoOriginal = int.Parse(aDatosBorrado[2]);
                    //Se realiza primero la inserción del nuevo hito y por último el borrado
                    //del viejo, para traspasar la documentación que pudiera tener.

                    //Inserta el hito en la nueva tabla
                    switch (sTipoHito)
                    {
                    case "HF":
                        //iCodHito = EstrProy.InsertarHito(tr, sDesHito, 0, iOrden);
                        iCodHito = EstrProy.InsertarHito(tr, sDesHito, 1, iOrden, iCodPE);
                        break;

                    case "HT":
                    case "HM":
                        //iCodHito = EstrProy.InsertarHitoPE(tr, iCodCR, iCodPE, sDesHito, sFecha, iOrden);
                        iCodHito = EstrProy.InsertarHitoPE(tr, iCodPE, sDesHito, sFecha, iOrden, sDesHitoLong);
                        break;
                    }

                    SqlDataReader dr;
                    //Selecciono los documentos de un tipo de hito, para luego insertarlos en el otro tipo de hitos.
                    if (sTipoHito == "HF")
                    {
                        dr = DOCUHE.Catalogo3(iCodHitoOriginal);
                    }
                    else
                    {
                        dr = DOCUH.Catalogo3(iCodHitoOriginal);
                    }

                    int nResul;
                    while (dr.Read())
                    {
                        long?idCS = null;//Id del documento en el Content-Server
                        if (dr["t2_iddocumento"].ToString() != "")
                        {
                            idCS = long.Parse(dr["t2_iddocumento"].ToString());
                        }
                        if (sTipoHito == "HF")
                        {
                            nResul = DOCUH.Insert(tr, iCodHito, dr["t367_descripcion"].ToString(), dr["t367_weblink"].ToString(),
                                                  dr["t367_nombrearchivo"].ToString(), idCS, (bool)dr["t367_privado"],
                                                  (bool)dr["t367_modolectura"], (bool)dr["t367_tipogestion"],
                                                  int.Parse(Session["UsuarioActual"].ToString()));
                        }
                        else
                        {
                            nResul = DOCUHE.Insert(tr, iCodHito, dr["t366_descripcion"].ToString(), dr["t366_weblink"].ToString(),
                                                   dr["t366_nombrearchivo"].ToString(), idCS, (bool)dr["t366_privado"],
                                                   (bool)dr["t366_modolectura"], (bool)dr["t366_tipogestion"],
                                                   int.Parse(Session["UsuarioActual"].ToString()));
                        }
                    }
                    dr.Close();
                    dr.Dispose();

                    //Borro el hito de la tabla en la que estaba
                    HITOPSP.Delete(tr, sTipoHito, iCodHitoOriginal);
                }
                #endregion
            }

            sTipoHito = aDatosHito[0];
            sEstado   = aDatosHito[7];
            sHitoPE   = aDatosHito[8];
            if (sHitoPE == "T")
            {
                bHitoPE = true;
            }
            else
            {
                bHitoPE = false;
            }
            sAlerta  = aDatosHito[9];
            sCiclico = aDatosHito[10];

            if ((sTipoHito == "HT") || (sTipoHito == "HM"))
            {
                iMargen = -1;
            }
            else
            {
                iMargen = 0;
            }
            if (sAlerta == "1")
            {
                bAlerta = true;
            }
            if (sCiclico == "1")
            {
                bCiclico = true;
            }
            HITOPSP.Update(tr, sTipoHito, iCodHito, sDesHito, sDesHitoLong, sEstado, iMargen, iOrden,
                           bAlerta, bCiclico, iCodPE, dtFecha, bHitoPE);

            //Grabamos las tareas asociadas al hito (Si es hito de PE no porque ya lo hace el trigger)
            //if (sTareas != "" && !bHitoPE)
            if (sTareas != "")
            {
                string[] aTareas = Regex.Split(sTareas, @"##");

                for (int i = 0; i < aTareas.Length - 1; i++)
                {
                    sCad       = aTareas[i];
                    sTipoLinea = sCad.Substring(0, 1);
                    sCodTarea  = quitaPuntos(sCad.Substring(1));
                    if (sTipoLinea == "D")
                    {//Borrar hito-tarea
                        HITOPSP.DeleteTarea(tr, iCodHito, int.Parse(sCodTarea));
                    }
                    else
                    {
                        if (sTipoLinea == "I")
                        {//Insertar hito-tarea
                            HITOPSP.InsertTarea(tr, iCodHito, int.Parse(sCodTarea));
                        }
                    }
                }
            }
            Conexion.CommitTransaccion(tr);
            //sResul = "OK@#@" + DateTime.Now.ToString() + "@#@" + Session["UsuarioActual"].ToString() + "@#@" + Session["APELLIDO1"].ToString() + " " + Session["APELLIDO2"].ToString() + ", " + Session["NOMBRE"].ToString();
            sResul = "OK@#@" + iCodHito.ToString() + "@#@";
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al grabar los datos del hito", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
Example #6
0
    private string Procesar(string sForzar, string sAnno, string strDatos)
    {
        string    sResul = "";
        int       nSubnodo = 0, nPE = 0, nPSN = 0;//, nDesde = 0, nHasta = 0, nAux = 0
        Hashtable htSubnodos = new Hashtable();
        Hashtable htNodos    = new Hashtable();
        NODO      oNodoAux   = null;

        int[] nDatosNodo;
        int?  idFicepiValidador = null;

        try
        {
            #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

            string[] aProyectos = Regex.Split(strDatos, "///");
            foreach (string oProyecto in aProyectos)
            {
                if (oProyecto == "")
                {
                    continue;
                }
                string[] aValores = Regex.Split(oProyecto, "##");
                /// aValores[0] = idNodo
                /// aValores[1] = idNaturaleza
                /// aValores[2] = FIV
                /// aValores[3] = FFV
                /// aValores[4] = idPlantilla
                /// aValores[5] = Denominación Naturaleza
                /// aValores[6] = Esreplicable
                ///
                /// aValores[7] = Hereda Nodo
                /// aValores[8] = Id Usuario responsable
                /// aValores[9] = Imputable GASVI
                /// aValores[10] = Id Ficepi Validador GASVI

                if (sForzar == "N" && PROYECTOSUBNODO.ExistePIG(tr, int.Parse(aValores[0]), int.Parse(aValores[1]), short.Parse(sAnno)))
                {
                    continue;
                }
                #region Datos de nodo y subnodo
                nDatosNodo = (int[])htSubnodos[int.Parse(aValores[0])];
                if (nDatosNodo == null)
                {
                    int nCountSubnodosManiobra2  = 0;
                    int idSubnodoManiobra2       = 0;
                    int nCountSubnodosNoManiobra = 0;
                    int idSubnodoNoManiobra      = 0;

                    DataSet dsSubNodos = SUBNODO.CatalogoActivos(tr, int.Parse(aValores[0]), true);
                    foreach (DataRow oSN in dsSubNodos.Tables[0].Rows)
                    {
                        if ((byte)oSN["t304_maniobra"] == 2)
                        {
                            nCountSubnodosManiobra2++;
                            idSubnodoManiobra2 = (int)oSN["t304_idsubnodo"];
                        }
                        else if ((byte)oSN["t304_maniobra"] == 0)
                        {
                            nCountSubnodosNoManiobra++;
                            idSubnodoNoManiobra = (int)oSN["t304_idsubnodo"];
                        }
                    }
                    dsSubNodos.Dispose();

                    //nSubnodo = SUBNODO.ObtenerSubnodoManiobra2(tr, int.Parse(aValores[0]));
                    NODO oNodo = NODO.Select(tr, int.Parse(aValores[0]));

                    if (nCountSubnodosNoManiobra == 1)
                    {
                        nSubnodo = idSubnodoNoManiobra;
                    }
                    else if (nCountSubnodosManiobra2 >= 1)
                    {
                        nSubnodo = idSubnodoManiobra2;
                    }
                    else
                    {
                        nSubnodo = SUBNODO.Insert(tr, "Improductivos genéricos", int.Parse(aValores[0]), 0, true, 2, oNodo.t314_idusuario_responsable, null);
                    }
                    htSubnodos.Add(int.Parse(aValores[0]), new int[3] {
                        int.Parse(aValores[0]),
                        nSubnodo,
                        oNodo.t314_idusuario_responsable
                    });
                    nDatosNodo = (int[])htSubnodos[int.Parse(aValores[0])];
                }


                oNodoAux = (NODO)htNodos[int.Parse(aValores[0])];
                if (oNodoAux == null)
                {
                    oNodoAux = NODO.Select(tr, int.Parse(aValores[0]));
                    htNodos.Add(int.Parse(aValores[0]), oNodoAux);
                }
                #endregion
                string sDenominacion = sAnno + " " + Utilidades.unescape(aValores[5]) + " (" + oNodoAux.t303_denabreviada + ")";
                int    nIdClientePIG = CLIENTE.ObtenerClientePIG(tr, int.Parse(aValores[0]));

                nPE = PROYECTO.Insert(tr, "A", sDenominacion.Substring(0, (sDenominacion.Length > 70) ? 70 : sDenominacion.Length), "",
                                      nIdClientePIG, null, null, int.Parse(aValores[1]), 4, DateTime.Parse(aValores[2]),
                                      DateTime.Parse(aValores[3]), "S", "J", "J", short.Parse(sAnno), false, false,
                                      (aValores[6] == "1")? true:false, null, false, null, null, Constantes.gIdNLO_Defecto);

                //nPSN = PROYECTOSUBNODO.Insert(tr, nPE, nDatosNodo[1], false, "C", true, nDatosNodo[2],
                //                            sAnno + " " + Utilidades.unescape(aValores[5]),
                //                            "X", "X", false, true, false, false, false, "", "", "", null, null, null, null,
                //                            null, null, false, 0);
                //Mikel 30/12/2011. Pongo como seudónimo del subnodo la misma denominación que para el proyecto
                if (aValores[10] != "" && aValores[10] != "null")
                {
                    idFicepiValidador = int.Parse(aValores[10]);
                }
                else
                {
                    idFicepiValidador = null;
                }
                //Mikel 02/02/2016 Los PIG deben llevar el admite recurso PST a cero
                nPSN = PROYECTOSUBNODO.Insert(tr, nPE, nDatosNodo[1], false, "C", (aValores[7] == "1") ? true : false,
                                              int.Parse(aValores[8]),                        //nDatosNodo[2],//Id Usuario Responsable
                                              sDenominacion.Substring(0, (sDenominacion.Length > 70) ? 70 : sDenominacion.Length),
                                              "X", "X", (aValores[9] == "1") ? true : false, //Imputable GASVI
                                              false,                                         //Admite recurso PST
                                              false, false, false, "", "", "", null, null, null, null, null,
                                              idFicepiValidador,                             //Id Ficepi Validador GASVI
                                              false, 0);

                //A falta de tener en cuenta si la naturaleza tiene plantilla.
                TAREAPSP.UpdateVigenciaByPSN(tr, nPSN, DateTime.Parse(aValores[2]), DateTime.Parse(aValores[3]));

                #region Grabación de plantilla
                if (aValores[4] != "0")
                {
                    //Hay que grabar la plantilla de PE.
                    int       iPos, iMargen, iPT = -1, iFase = -1, iActiv = -1, iTarea = -1, iHito = -1, iAux = -1, iOrden = 0, idItemHitoPl;
                    double    fDuracion;
                    decimal   fPresupuesto;
                    string    sTipo, sDesc, sFiniPL, sFfinPL, sFiniV, sFfinV, sAux, sAvisos, sIdTareaPL, sCad;
                    bool      bFacturable, bObligaEst, bAvanceAutomatico, bEstadoTarea;
                    ArrayList alTareas = new ArrayList();

                    PROYECTOSUBNODO.BorrarPTByPSN(tr, nPSN);

                    #region 1º Se insertan las filas de la estructura
                    SqlDataReader dr = PlantTarea.Catalogo(int.Parse(aValores[4]));
                    while (dr.Read())
                    {
                        sTipo = dr["Tipo"].ToString();
                        if (sTipo == "H")
                        {
                            sTipo = "HT";
                        }
                        sDesc   = Utilidades.escape(dr["Nombre"].ToString());
                        iMargen = int.Parse(dr["margen"].ToString());

                        //Si la linea es de hito compruebo si el hito es de tarea o no para actualizar la variable iTarea
                        if (sTipo == "HT" || sTipo == "HM" || sTipo == "HF")
                        {
                            switch (iMargen)
                            {
                            case 80:    //es un hito de tarea por lo que mantengo el código de tarea
                                break;

                            case 60:    //es un hito de fase y actividad o de tarea con actividad sin fase
                                if (iFase != -1)
                                {
                                    iTarea = -1;
                                }
                                break;

                            case 40:    //es un hito de fase o de tarea sin actividad ni fase o de actividad sin fase
                                if (iFase != -1)
                                {
                                    iTarea = -1;
                                    iActiv = -1;
                                }
                                else
                                {
                                    if (iActiv != -1)
                                    {
                                        iTarea = -1;
                                    }
                                }
                                break;

                            case 20:   //es un hito proyecto técnico
                            case 0:    //es un hito de proyecto económico
                                iTarea = -1;
                                iActiv = -1;
                                iFase  = -1;
                                break;
                            }
                        }

                        fDuracion    = 0;
                        sFiniPL      = ""; //¿alguno es obligatorio?
                        sFfinPL      = "";
                        sFiniV       = Fechas.primerDiaMes(DateTime.Today).ToShortDateString();
                        sFfinV       = "";
                        fPresupuesto = 0;
                        sIdTareaPL   = dr["t339_iditems"].ToString();

                        bFacturable = (bool)dr["t339_facturable"];

                        //if (sEstado != "D")
                        iOrden++;
                        //iOrden = int.Parse(aElem[8]);
                        //Si no ha cambiado la linea pero el orden actual es distinto del original hay que updatear la linea para actualizar el orden
                        switch (sTipo)
                        {
                        case "P":
                            iPT    = -1;
                            iFase  = -1;
                            iActiv = -1;
                            break;

                        case "F":
                            iFase  = -1;
                            iActiv = -1;
                            break;

                        case "A":
                            iActiv = -1;
                            if (iMargen != 40)
                            {
                                iFase = -1;
                            }
                            break;

                        case "T":
                            iTarea = -1;
                            if (iMargen == 40)
                            {
                                iFase = -1;
                            }
                            else
                            {
                                if (iMargen != 60)
                                {
                                    iFase  = -1;
                                    iActiv = -1;
                                }
                            }
                            break;

                        case "HT":
                        case "HF":
                        case "HM":
                            iHito = -1;    //int.Parse(aElem[7]);
                            break;
                        }

                        bObligaEst        = (bool)dr["obliga"];
                        bAvanceAutomatico = (bool)dr["avance"];
                        sAux = EstrProy.Insertar(tr, int.Parse(aValores[0]), nPE, nPSN, sTipo, sDesc, iPT, iFase, iActiv, iMargen, iOrden,
                                                 sFiniPL, sFfinPL, fDuracion, sFiniV, sFfinV, fPresupuesto,
                                                 bFacturable, bObligaEst, bAvanceAutomatico, "1", "", 0);

                        iPos    = sAux.IndexOf("##");
                        iAux    = int.Parse(sAux.Substring(0, iPos));
                        sAvisos = sAux.Substring(iPos + 2);

                        switch (sTipo)
                        {
                        case "P": iPT = iAux; break;

                        case "F": iFase = iAux; break;

                        case "A": iActiv = iAux; break;

                        case "T":
                            iTarea = iAux;
                            if (sIdTareaPL != "" && sIdTareaPL != "-1")
                            {
                                string[] aDatosAux = new string[] { sIdTareaPL, iAux.ToString() };
                                alTareas.Add(aDatosAux);
                                //Grabo los atributos estadísticos provenientes de la plantilla. iAux=código de tarea
                                TAREAPSP.InsertarAE(tr, int.Parse(sIdTareaPL), iAux);
                            }

                            //Hay que guardar las tareas que quedan pendientes, ya que luego hay que actualizar el estado en pantalla
                            bEstadoTarea = TAREAPSP.bFaltanValoresAE(tr, short.Parse(aValores[0]), iAux);
                            if (bEstadoTarea)
                            {
                                //actualizo el estado de la tarea
                                TAREAPSP.Modificar(tr, iTarea, sDesc, iPT, iActiv, iOrden, sFiniPL, sFfinPL, fDuracion, sFiniV,
                                                   sFfinV, (int)Session["UsuarioActual"], fPresupuesto, 2, bFacturable);
                                //sAvisos = "Se han insertado tareas que quedan en estado Pendiente ya que el C.R. tiene atributos estadísticos\nobligatorios para los que la tarea no tiene valores asignados";
                                //if (sTareasPendientes == "") sTareasPendientes = iAux.ToString();
                                //else sTareasPendientes += "//"+ iAux.ToString();
                            }
                            break;

                        case "HT":
                            iHito = iAux;
                            break;
                        }
                        if (sTipo.Substring(0, 1) == "H")
                        {
                            AsociarTareasHitos(tr, nPSN, iPT, iFase, iActiv, iTarea, iHito, iMargen);
                        }
                    }
                    dr.Close();
                    dr.Dispose();
                    #endregion

                    #region 2º Se insertan las filas de los hitos de cumplimiento discontinuo
                    dr = PlantTarea.CatalogoHitos(int.Parse(aValores[4]));
                    while (dr.Read())
                    {
                        sTipo        = "HM";
                        sDesc        = dr["t369_deshito"].ToString();
                        idItemHitoPl = (int)dr["t369_idhito"];
                        iOrden       = int.Parse(dr["t369_orden"].ToString());

                        sAux    = EstrProy.Insertar(tr, int.Parse(aValores[0]), nPE, nPSN, sTipo, sDesc, 0, 0, 0, 0, iOrden, "", "", 0, "", "", 0, false, false, false, "1", "", 0);
                        iPos    = sAux.IndexOf("##");
                        iAux    = int.Parse(sAux.Substring(0, iPos));
                        sAvisos = sAux.Substring(iPos + 2);
                        //Si es hito de cumplimiento discontinuo y se ha cargado desde plantilla hay que grabar sus tareas
                        if (sTipo == "HM")
                        {
                            if (idItemHitoPl > 0)
                            {
                                //Recojo las tareas de plantilla del código de hito en plantilla
                                sCad = HITOE_PLANT.fgListaTareasPlantilla(tr, idItemHitoPl);
                                string[] aElems2 = Regex.Split(sCad, @"##");
                                for (int j = 0; j < aElems2.Length; j++)
                                {
                                    sIdTareaPL = aElems2[j];
                                    if (sIdTareaPL != "" && sIdTareaPL != "-1")
                                    {
                                        //Identifico el código de tarea real asociado al codigo de tarea de plantilla
                                        for (int n = 0; n < alTareas.Count; n++)
                                        {
                                            if (((string[])alTareas[n])[0] == sIdTareaPL)
                                            {//Inserto la tarea del hito
                                                sCad   = ((string[])alTareas[n])[1];
                                                iTarea = int.Parse(sCad);
                                                EstrProy.InsertarTareaHito(tr, iAux, iTarea);
                                                break;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }//while
                    dr.Close();
                    dr.Dispose();
                    #endregion
                }
                #endregion
            }

            Conexion.CommitTransaccion(tr);

            sResul = "OK";
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = "Error@#@" + Errores.mostrarError("Error al crear los proyectos improductivos genéricos.", ex, false);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
Example #7
0
        /// <summary>
        /// Genera la estructura técnica de un proyecto en SUPER, sobre un proyecto ya existente
        /// Se borran los item que están en SUPER y no están en OpenProj (salvo que tengan consumos)
        /// Si el ítem es nuevo en OpenProj - > se inserta en SUPER
        /// Si el ítem tiene codigo (<Numero1></Numero1>) se updatea en SUPER
        /// </summary>
        private string Importar(bool bBorrarEstructura)
        {
            StringBuilder  sb = new StringBuilder();
            int            idPSN = -1, iMargen = 0, iCodUne = -1, iNumProy = -1, iPos, iAux;
            int            iPT = -1, iFase = -1, iActiv = -1, iTarea = -1, iHito = -1, iOrden = 1;
            string         sSituacion = "1", sAux, sTipo, sCodSuperItem = "", sNota = "", sAccion = "", sTaskUID = "", sCodTarea = "";//sMargen = "0",
            string         sFIPL = "", sFFPL = "", sFFPR = "", sWorkTarea = "", sListaTareas = "", sListaRecursos = "", sDenTarea = "", sCodUser = "";
            string         sMensError = "";
            bool           bFacturable, bHayQueUpdatear = false;//, bEsHito = false
            decimal        dETPL = 0, dETPR = 0;
            DateTime?      dtFIPL = null;
            DateTime?      dtFFPL = null;
            SqlConnection  oConn  = null;
            SqlTransaction tr     = null;

            sListaTareas   = this.hdnTareas.Value;
            sListaRecursos = this.hdnRecursos.Value;
            htTareas       = new Hashtable();

            #region Abro transaccion
            try
            {
                oConn = Conexion.Abrir();
                tr    = Conexion.AbrirTransaccion(oConn);
            }
            catch (Exception ex)
            {
                return("Error@#@" + Errores.mostrarError("Error al abrir la conexión", ex));
            }
            #endregion
            idPSN = int.Parse(this.hdnPSN.Value);

            try
            {
                iCodUne = PROYECTOSUBNODO.GetNodo(tr, idPSN);
                if (bBorrarEstructura)
                {
                    if (PROYECTOSUBNODO.TieneConsumos(tr, idPSN))
                    {
                        Conexion.CerrarTransaccion(tr);
                        return("Error@#@El proyecto tiene consumos. No se puede eliminar la estructura actual.");
                    }
                    else
                    {
                        EstrProy.BorrarEstructura(tr, idPSN);
                    }
                }
                else
                {
                    //Vamos a meter lo que importamos debajo de lo que ya existe. Para ello obtenemos el mayor orden de los PT existentes
                    iOrden = ProyTec.GetMaxOrden(tr, idPSN) + 1;
                }
                bFacturable = PROYECTOSUBNODO.GetFacturable(tr, idPSN);

                #region Inserto y/o updateo los items del proyecto
                string[] aTareas = Regex.Split(sListaTareas, @"/#/");
                for (int i = 0; i < aTareas.Length - 1; i++)
                {
                    string[] aElem = Regex.Split(aTareas[i], @"#@#");
                    #region recojo datos del XML

                    /*
                     * aElem[0]: sTipo + "##";
                     * aElem[1]: UID + "##";
                     * aElem[2]: sMargen + "##";
                     * aElem[3]: DENOMINACION + "##";
                     * aElem[4]: ETPL + "##";
                     * aElem[5]: FIPL + "##";
                     * aElem[6]: FFPL + "##";
                     * aElem[7]: ETPR + "##";
                     * aElem[8]: FFPR + "##";
                     * aElem[9]: NOTAS + "##";
                     */
                    sTipo     = aElem[0];
                    sTaskUID  = aElem[1];
                    iMargen   = int.Parse(aElem[2]);
                    sDenTarea = aElem[3];
                    dETPL     = decimal.Parse(aElem[4]);
                    dETPR     = decimal.Parse(aElem[7]);
                    sFIPL     = aElem[5];
                    sFFPL     = aElem[6];
                    sFFPR     = aElem[8];
                    sNota     = aElem[9];
                    #endregion

                    #region Cálculo de códigos padre
                    switch (sTipo)
                    {
                    case "P":
                        iFase  = -1;
                        iActiv = -1;
                        break;

                    case "F":
                        iActiv = -1;
                        break;

                    case "A":
                        if (iMargen != 40)
                        {
                            iFase = -1;
                        }
                        break;

                    case "T":
                        if (iMargen == 40)
                        {
                            iFase = -1;
                        }
                        else
                        if (iMargen != 60)
                        {
                            iFase = -1; iActiv = -1;
                        }
                        break;
                        //case "HT":
                        //case "HF":
                        //case "HM":
                        //    iHito = int.Parse(aElem[7]);
                        //    if (sEstado == "D") sCadenaBorrado += sTipo + "@#@" + iHito.ToString() + @"##";//hito
                        //    break;
                    }
                    #endregion

                    #region Inserto o updateo el item de la estructura en BBDD
                    if (sCodSuperItem == "" || bBorrarEstructura)
                    {
                        sAccion = "I";
                    }
                    else
                    {
                        if (sCodSuperItem == "0.0" || sCodSuperItem == "0,0")
                        {
                            sAccion = "I";
                        }
                        else
                        {
                            sAccion = "U";
                            //El item esta en OpenProj -> marco en la hashtable para que no lo borre
                            #region obtención del código del elemento updateado
                            sAux = sCodSuperItem.Replace(",", ".");
                            iAux = int.Parse(sAux);
                            ItemsProyecto oItemAux = new ItemsProyecto();
                            switch (sTipo)
                            {
                            case "P":
                                iPT             = iAux;
                                oItemAux        = (ItemsProyecto)htPTs[iPT];
                                oItemAux.borrar = false;
                                htPTs[iPT]      = oItemAux;
                                break;

                            case "F":
                                iFase           = iAux;
                                oItemAux        = (ItemsProyecto)htFs[iFase];
                                oItemAux.borrar = false;
                                htFs[iFase]     = oItemAux;
                                break;

                            case "A":
                                iActiv          = iAux;
                                oItemAux        = (ItemsProyecto)htAs[iActiv];
                                oItemAux.borrar = false;
                                htAs[iActiv]    = oItemAux;
                                break;

                            case "T":
                                iTarea          = iAux;
                                oItemAux        = (ItemsProyecto)htItems[iTarea];
                                oItemAux.borrar = false;
                                htItems[iTarea] = oItemAux;
                                break;

                            case "HF":
                                iHito           = iAux;
                                oItemAux        = (ItemsProyecto)htHFs[iHito];
                                oItemAux.borrar = false;
                                htHFs[iHito]    = oItemAux;
                                break;
                            }
                            //if (sTipo.Substring(0, 1) == "H")
                            //{
                            //    AsociarTareasHitos(tr, iT305IdProy, iPT, iFase, iActiv, iTarea, iHito, iMargen);
                            //}
                            #endregion
                        }
                    }
                    if (sAccion == "I")
                    {
                        sAux = OpenProj.Insertar(tr, iCodUne, iNumProy, idPSN, sTipo, sDenTarea, iPT, iFase, iActiv, iMargen, iOrden,
                                                 sFIPL, sFFPL, dETPL, sFFPR, dETPR, Fechas.primerDiaMes(DateTime.Now).ToShortDateString(), "",
                                                 0, bFacturable, false, true, sSituacion, sNota, 0
                                                 );
                        #region obtención del código del elemento grabado
                        iPos = sAux.IndexOf("##");
                        iAux = int.Parse(sAux.Substring(0, iPos));
                        switch (sTipo)
                        {
                        case "P":
                            iPT = iAux;
                            break;

                        case "F":
                            iFase = iAux;
                            break;

                        case "A":
                            iActiv = iAux;
                            break;

                        case "T":
                            iTarea = iAux;
                            htTareas.Add(sTaskUID, iTarea.ToString());
                            break;
                            //case "HT":
                            //    iHito = iAux;
                            //    break;
                        }
                        //if (sTipo.Substring(0, 1) == "H")
                        //{
                        //    AsociarTareasHitos(tr, iT305IdProy, iPT, iFase, iActiv, iTarea, iHito, iMargen);
                        //}
                        #endregion
                    }
                    else
                    {//Hay que updatear el item (si hay algún cambio)
                        bHayQueUpdatear = false;

                        #region Mira si hay algún datos distinto para ver si hay que updatear el registro en la BBDD
                        ItemsProyecto oItem = new ItemsProyecto();
                        switch (sTipo)
                        {
                        case "T":
                            oItem = (ItemsProyecto)htItems[iTarea];
                            break;

                        case "P":
                            oItem = (ItemsProyecto)htPTs[iPT];
                            break;

                        case "F":
                            oItem = (ItemsProyecto)htFs[iFase];
                            break;

                        case "A":
                            oItem = (ItemsProyecto)htAs[iActiv];
                            break;

                        case "HF":
                            oItem = (ItemsProyecto)htHFs[iHito];
                            break;
                        }
                        if (oItem.nombre != sDenTarea)
                        {
                            bHayQueUpdatear = true;
                        }
                        else
                        {
                            if (oItem.descripcion != sNota)
                            {
                                bHayQueUpdatear = true;
                            }
                            else
                            {
                                if (sTipo == "T")
                                {
                                    if (oItem.PRIMER_CONSUMO.Substring(0, 10) != sFIPL)
                                    {
                                        bHayQueUpdatear = true;
                                    }
                                    else
                                    {
                                        if (oItem.FFPR.Substring(0, 10) != sFFPR)
                                        {
                                            bHayQueUpdatear = true;
                                        }
                                        else
                                        {
                                            if (oItem.ETPR != dETPR)
                                            {
                                                bHayQueUpdatear = true;
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        #endregion

                        if (bHayQueUpdatear)
                        {
                            OpenProj.Modificar(tr, iCodUne, idPSN, sTipo, sDenTarea, iPT, iFase, iActiv, iTarea, iHito,
                                               iMargen, iOrden, sFIPL, sFFPL, dETPL, sNota);
                        }
                    }
                    iOrden++;
                    #endregion
                }
                #endregion

                #region Si hay recursos con nº empleado SUPER y con asignación a tarea, los meto
                bool     bAux      = false;
                string[] aRecursos = Regex.Split(sListaRecursos, @"/#/");
                for (int i = 0; i < aRecursos.Length - 1; i++)
                {
                    string[] aElem = Regex.Split(aRecursos[i], @"#@#");
                    //Recojo el código SUPER del recurso en la tarea
                    sTaskUID   = aElem[0];
                    sCodUser   = aElem[1];
                    sWorkTarea = aElem[2];
                    sFIPL      = aElem[3];
                    sFFPL      = aElem[4];
                    if (sFIPL != "")
                    {
                        dtFIPL = DateTime.Parse(sFIPL);
                    }
                    if (sFFPL != "")
                    {
                        dtFFPL = DateTime.Parse(sFFPL);
                    }
                    if (sCodUser != "")
                    {
                        sCodTarea = htTareas[sTaskUID].ToString();
                        if (sCodTarea != "" && sWorkTarea != "")
                        {
                            bAux = TareaRecurso.InsertarTEC(tr, int.Parse(sCodTarea), int.Parse(sCodUser), null, null,
                                                            double.Parse(sWorkTarea), dtFIPL, dtFFPL,
                                                            null, 1, "", "", true, true, idPSN, -1, -1);
                            if (!bAux)
                            {
                                sMensError += "Por restricciones del proyecto no es posible asignar el empleado " + sCodUser + " a la tarea " + sCodTarea + "\n";
                            }
                            TareaRecurso.UpdateEsfuerzo(tr, int.Parse(sCodTarea), int.Parse(sCodUser), null, double.Parse(sWorkTarea),
                                                        dtFIPL, dtFFPL, null, 1);
                        }
                    }
                }
                #endregion

                #region borro los items que estando en SUPER no están en OpenProj (si es tarea que no tenga consumo)
                //if (!bBorrarEstructura)
                //{
                //    ItemsProyecto oItemD = new ItemsProyecto();
                //    //Borrado de Proyectos Técnicos
                //    foreach (DictionaryEntry item in htPTs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            ProyTec.Eliminar(tr, oItemD.codPT);
                //    }
                //    //Borrado de Fases
                //    foreach (DictionaryEntry item in htFs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            FASEPSP.Delete(tr, oItemD.codFase);
                //    }
                //    //Borrado de Actividades
                //    foreach (DictionaryEntry item in htAs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            ACTIVIDADPSP.Delete(tr, oItemD.codActiv);
                //    }
                //    //Borrado de Hitos de fecha
                //    foreach (DictionaryEntry item in htHFs)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //            HITOPSP.Delete(tr, "HF", oItemD.codTarea);
                //    }
                //    //Borrado de Tareas que no tengan consumos
                //    foreach (DictionaryEntry item in htItems)
                //    {
                //        oItemD = (ItemsProyecto)item.Value;
                //        if (oItemD.borrar)
                //        {
                //            if (oItemD.Consumido == 0)
                //                TAREAPSP.Delete(tr, oItemD.codTarea);
                //        }
                //    }
                //}
                #endregion

                //Cierro transaccion
                Conexion.CommitTransaccion(tr);
                if (sMensError == "")
                {
                    sMensError = "OK";
                }
                else
                {
                    sMensError = "OKMSG@#@" + sMensError;
                }
                return(sMensError);
            }
            catch (Exception ex)
            {
                Conexion.CerrarTransaccion(tr);
                return(Errores.mostrarError("Error al cargar la estructura a partir del fichero XML", ex));
            }
            finally
            {
                Conexion.Cerrar(oConn);
            }
        }
Example #8
0
    private string GetTareas(int idPSN, int idUser, string sEstados)
    {
        StringBuilder sb = new StringBuilder();
        string        sDesTipo, sDesc, sTarea, sMargen;//sCodPT, sFase, sActiv, sOrden,
        int           iId = -1;

        sb.Append("<table id='tblTareas' class='texto' style='width:540px;'>");
        sb.Append("<colgroup><col style='width:390px;'/><col style='width:30px;'/><col style='width:120px;'/></colgroup>");

        SqlDataReader dr = EstrProy.EstructuraCompleta(idPSN, idUser, sEstados);

        while (dr.Read())
        {
            iId++;
            sDesTipo = dr["Tipo"].ToString();
            sDesc    = HttpUtility.HtmlEncode(dr["Nombre"].ToString());
            //sCodPT = dr["codPT"].ToString();
            //sFase = dr["codFase"].ToString();
            //sActiv = dr["codActiv"].ToString();
            sTarea = dr["codTarea"].ToString();
            //sOrden = dr["orden"].ToString();
            sMargen = dr["margen"].ToString();

            sb.Append("<tr style='height:20px;");

            if (sDesTipo == "T")
            {
                sb.Append("' id='" + sTarea + "' ");
            }
            else
            {
                sb.Append("' id='" + iId.ToString() + "' ");
            }

            sb.Append("des='" + sDesc + "' ");
            sb.Append("mar='" + sMargen + "' ");

            if (sDesTipo == "P")
            {
                sb.Append(" nivel='1' desplegado='1' ");
            }
            else
            {
                sb.Append(" nivel='2' desplegado='1' ");
            }

            //sb.Append("tipo='" + sDesTipo + "' iPT='" + sCodPT + "' iF='" + sFase + "' iA='" + sActiv + "' ");
            sb.Append("tipo='" + sDesTipo + "' ");
            sb.Append("iT='" + sTarea + "'");
            //sb.Append("iT='" + sTarea + "' iOrd='" + iId + "' iLP1='0' iLP2='0'  ");
            //sb.Append("iPTn='" + sCodPT + "' iFn='" + sFase + "' iAn='" + sActiv + "' iTn='" + sTarea + "' ");
            //sb.Append("iOrdn='" + sOrden + "' ");
            sb.Append(" onclick='ms(this);'>");
            sb.Append("<td>");
            switch (sDesTipo)
            {
            case "P":
            case "F":
            case "A":
                //sb.Append("<img src='../../../../Images/plus.gif' style='margin-left:" + sMargen + "px;'>");
                sb.Append("<img src='../../../../Images/minus.gif' onclick='mostrar(this);' style='cursor:pointer; margin-left:" + sMargen + "px;'>");
                break;

            case "T":
                sb.Append("<img src='../../../../Images/imgTrans9x9.gif' style='margin-left:" + sMargen + "px;'>");
                break;
            }
            sb.Append("</td>");
            if (sDesTipo == "T")
            {
                sb.Append("<td><input type='checkbox' style='width:30px' class='checkTabla'></td>");//columna para marcar/desmarcar
            }
            else
            {
                sb.Append("<td></td>");
            }
            sb.Append("<td title='" + dr["perfil"].ToString() + "'><nobr class='NBR W120'>" + dr["perfil"].ToString() + "</nobr></td>");//columna para el perfil
            sb.Append("</tr>");
        }
        sb.Append("</tbody></table>");
        dr.Close();
        dr.Dispose();

        return(sb.ToString());
    }