private string PonerRecurso(bool bSoloAsignadas, bool bSoloActivas, int iRecursoOrigen, string sTipoItem, int IdRecurso, int IdItem,
                                string sHaciaProy, int IdNodo, int iUltCierreEco, int IdPsn, bool bNotifProf)
    {
        SqlConnection  oConn = null;
        SqlTransaction tr = null;
        string         sResul = "";
        bool           bAdmiteRecursoPST, bRecursoAsignado = false;

        try
        {
            if (sHaciaProy == "S")
            {
                bAdmiteRecursoPST = true;
            }
            else
            {
                bAdmiteRecursoPST = false;
            }
            //Abro transaccion
            oConn = Conexion.Abrir();
            tr    = Conexion.AbrirTransaccion(oConn);

            switch (sTipoItem)
            {
            case "E":
                PROYECTOSUBNODO.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null,
                                                         -1, "", false, bAdmiteRecursoPST, IdNodo, iUltCierreEco);
                break;

            case "P":
                ProyTec.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null, -1, "", false, bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                break;

            case "F":
                FASEPSP.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null, -1, "", false, bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                break;

            case "A":
                ACTIVIDADPSP.AsignarTareasProfesional(tr, bSoloAsignadas, bSoloActivas, iRecursoOrigen, IdItem, IdRecurso, null, null, -1, "", false, bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                break;

            case "T":
                //iNumAsig = TareaRecurso.InsertarSNE(tr, IdItem, IdRecurso, null, null, null, null, null, null, 1, null, "", false);
                bRecursoAsignado = TareaRecurso.InsertarTEC(tr, IdItem, IdRecurso, null, null, null, null, null, null, 1, null, "", false,
                                                            bAdmiteRecursoPST, IdPsn, IdNodo, iUltCierreEco);
                if (bNotifProf && bRecursoAsignado)    //se notifica a profesionales y no estaba ya asignado a la tarea
                {
                    TAREAPSP oTar  = TAREAPSP.Obtener(null, IdItem);
                    TAREAPSP oTar2 = TAREAPSP.ObtenerOTC(null, IdItem);
                    string   oRec  = "##" + IdItem.ToString() + "##" + IdRecurso.ToString() + "################";
                    oRec += Utilidades.escape(oTar.t332_destarea) + "##";
                    oRec += oTar.num_proyecto.ToString() + "##" + Utilidades.escape(oTar.nom_proyecto) + "##";
                    oRec += Utilidades.escape(oTar.t331_despt) + "##" + Utilidades.escape(oTar.t334_desfase) + "##" + Utilidades.escape(oTar.t335_desactividad) + "##";
                    oRec += Utilidades.escape(oTar2.t346_codpst) + "##" + Utilidades.escape(oTar2.t346_despst) + "##";
                    oRec += Utilidades.escape(oTar.t332_otl) + "##" + Utilidades.escape(oTar.t332_incidencia) + "##";

                    TareaRecurso.EnviarCorreoRecurso(tr, "I", oRec, "", "", "", "", Utilidades.escape(oTar.t332_mensaje));
                }
                break;
            }
            //if (sHaciaProy == "S")
            //{
            //    if (!TareaRecurso.AsociadoAProyecto(tr, IdPsn, IdRecurso))
            //    {//lA FECHA DE alta en el proyecto será la siguiente al último mes cerrado del nodo
            //        DateTime dtFechaAlta = Fechas.AnnomesAFecha(Fechas.AddAnnomes(iUltCierreEco, 1));
            //        TareaRecurso.AsociarAProyecto(tr, IdNodo, IdRecurso, IdPsn, null, dtFechaAlta, null);
            //    }
            //    else
            //        TareaRecurso.ReAsociarAProyecto(tr, IdRecurso, IdPsn);
            //}
            Conexion.CommitTransaccion(tr);
        }
        catch (Exception ex)
        {
            Conexion.CerrarTransaccion(tr);
            sResul = Errores.mostrarError("Error al grabar", ex);
        }
        finally
        {
            Conexion.Cerrar(oConn);
        }
        return(sResul);
    }
Example #2
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);
            }
        }