예제 #1
0
 //-----------------------------------------------
 public CElementDeGanttMetaProjet(IElementDeGantt elementParent, CMetaProjet metaProjet)
     : base(elementParent)
 {
     m_metaProjet  = metaProjet;
     PctAvancement = metaProjet.PctAvancement;
     Poids         = 1;
 }
예제 #2
0
        public void Init(CMetaProjet metaProjet)
        {
            if (metaProjet != m_metaProjet)
            {
                DateTime dateDebut = DateTime.Now;
                dateDebut = metaProjet.DateDebutPlanifiee;
                m_parametreAffichage.DateDebut = m_parametreAffichage.AddCells(dateDebut, -1);
            }
            m_metaProjet = metaProjet;
            m_projet     = null;
            if (metaProjet != null)
            {
                m_contexteDonnee = metaProjet.ContexteDonnee;
            }

            CParametreDessinLigneGantt parametreDessinGantt;

            m_composantSauvegardePreferences.InitFromRegistre();

            if (m_parametreDessinLigne != null)
            {
                parametreDessinGantt = m_parametreDessinLigne;
            }
            else
            {
                parametreDessinGantt = CParametreDessinLigneGantt.ParametreParDefaut;
            }

            m_parametreAffichage.LineHeight = parametreDessinGantt.HauteurLigne;

            m_gantt.Visible   = false;
            m_gantt.Parametre = m_parametreAffichage;
            CFiltreData filtre = m_filtreDeBase;

            if (m_filtreUser != null)
            {
                filtre = CFiltreData.GetAndFiltre(filtre, m_filtreUser);
            }
            m_iconeHasFilter.Visible = m_filtreUser != null && m_filtreUser.Filtre != "" && m_filtreUser.Filtre != "1=1";
            CResultAErreur result = CParametrageGantt.CreateGantt(
                metaProjet,
                m_parametreGroupement == null ? null : m_parametreGroupement.GroupeRacine,
                filtre);

            if (result)
            {
                m_baseGantt     = result.Data as CBaseGantt;
                m_gantt.Visible = true;
                m_gantt.Init(m_baseGantt);
                m_gantt.ParametreDessinLigne = parametreDessinGantt;
            }
            m_cmbDisplayMode.Init(typeof(CParametrageGantt), "Libelle", false);
            if (m_parametreGroupement != null)
            {
                m_cmbDisplayMode.ElementSelectionne = m_parametreGroupement;
            }
        }
        //--------------------------------------------------------
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

            if (!result)
            {
                return(result);
            }
            DataTable table = contexte.Tables[GetNomTable()];

            if (table == null)
            {
                return(result);
            }
            HashSet <CMetaProjet> lstMetaProjetsARecalculer = new HashSet <CMetaProjet>();

            foreach (DataRow row in new ArrayList(table.Rows))
            {
                if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified)
                {
                    CRelationMetaProjet_Projet rel = new CRelationMetaProjet_Projet(row);
                    if (rel != null && rel.MetaProjet != null && rel.MetaProjet.IsValide())
                    {
                        lstMetaProjetsARecalculer.Add(rel.MetaProjet);
                    }
                }
                if (row.RowState == DataRowState.Deleted)
                {
                    if (row.HasVersion(DataRowVersion.Original))
                    {
                        CRelationMetaProjet_Projet rel = new CRelationMetaProjet_Projet(row);
                        rel.VersionToReturn = DataRowVersion.Original;
                        try
                        {
                            CMetaProjet meta = rel.MetaProjet;
                            if (meta != null && meta.IsValide())
                            {
                                lstMetaProjetsARecalculer.Add(meta);
                            }
                        }
                        catch { }
                    }
                }
            }
            foreach (CMetaProjet meta in lstMetaProjetsARecalculer)
            {
                meta.UpdateDateDebutPlanifieeFromChilds(false);
                meta.UpdateDateFinPlanifieeFromChilds(false);
                meta.CalcProgress(false);
            }
            return(result);
        }
예제 #4
0
        //-------------------------------------------------------------------
        public override CResultAErreur VerifieDonnees(CObjetDonnee objet)
        {
            CResultAErreur result = CResultAErreur.True;

            try
            {
                CMetaProjet proj = (CMetaProjet)objet;

                if (proj.Libelle == null || proj.Libelle == "")
                {
                    result.EmpileErreur(I.T("The meta project label cannot be empty|20180"));
                }
            }
            catch (Exception e)
            {
                result.EmpileErreur(new CErreurException(e));
            }
            return(result);
        }
예제 #5
0
        // /////////////////////////////////////////////////////////
        /// <summary>
        /// Le data du result contient un IBaseGantt
        /// </summary>
        /// <returns></returns>
        public static CResultAErreur CreateGantt(
            CMetaProjet metaProjet,
            CParametreNiveauArbreGanttGroupe groupeRacine,
            CFiltreData filtreElements)
        {
            CResultAErreur result = CResultAErreur.True;
            if (metaProjet == null)
                return result;
            CElementDeGanttMetaProjet elementRacine = new CElementDeGanttMetaProjet(null, metaProjet);
            if (!result)
                return result;
            List<CProjet> lstProjets = new List<CProjet>();

            bool bLectureDansContexteCourant = false;
            //S'il y a des éléments modifiés, ajoutés ou supprimés dans
            //les relations, charge manuellement
            DataTable table = metaProjet.ContexteDonnee.GetTableSafe(CRelationMetaProjet_Projet.c_nomTable);
            if ( table != null )
            {
                if ( table.Select ( "", "", DataViewRowState.Added | DataViewRowState.Deleted | DataViewRowState.ModifiedCurrent ).Length > 0 )
                {
                    bLectureDansContexteCourant = true;
                    //Il y a des modifs, on ne peut donc pas appliquer le filtre,
                    //et on doit aller chercher les projets manuellement
                    foreach ( CRelationMetaProjet_Projet rel in metaProjet.RelationsProjets )
                    {
                        List<CProjet> lstTmp = new List<CProjet>();
                        lstTmp.Add ( rel.Projet );
                        while ( lstTmp.Count > 0 )
                        {
                            List<CProjet> lstSuivante = new List<CProjet>();
                            foreach ( CProjet prj in lstTmp )
                            {
                                lstProjets.Add ( prj );
                                lstSuivante.AddRange ( prj.ProjetsFils.ToList<CProjet>());
                            }
                            lstTmp = lstSuivante;
                        }
                    }
                }
            }
            if (!bLectureDansContexteCourant)
            {
                CFiltreData filtre = result.Data as CFiltreData;
                filtre = CFiltreData.GetAndFiltre(filtreElements,
                    new CFiltreDataAvance(
                        CProjet.c_nomTable,
                        CRelationMetaProjet_Projet.c_nomTable + "." +
                        CMetaProjet.c_champId + "=@1",
                        metaProjet.Id));

                filtre.IntegrerFilsHierarchiques = !metaProjet.HideChildProjects;
                CListeObjetsDonnees lstObjetProjets = new CListeObjetsDonnees(metaProjet.ContexteDonnee, typeof(CProjet), filtre);
                lstObjetProjets.PreserveChanges = true;
                lstObjetProjets.ModeSansTri = true;
                lstProjets.AddRange(lstObjetProjets.ToList<CProjet>());
                if ( metaProjet.HideChildProjects )
                    lstObjetProjets.ReadDependances("LiensEnTantQueProjetA.ProjetB", "LiensEnTantQueProjetB.ProjetA", "ContraintesPropres", "AnomaliesDuProjet");
                else
                    lstObjetProjets.ReadDependances("ProjetsFils", "LiensEnTantQueProjetA.ProjetB", "LiensEnTantQueProjetB.ProjetA", "ContraintesPropres", "AnomaliesDuProjet");
                CUtilElementAChamps.ReadChampsCustom(lstObjetProjets);
            }

            CContexteDonnee contexteDeTravail = metaProjet.ContexteDonnee;

            return PrepareGantt(groupeRacine, result, elementRacine, lstProjets, contexteDeTravail);
        }
예제 #6
0
        /// //////////////////////////////////////////////////
        ///Lance le calcul
        public static void DoCalc(CElementsProjetARecalculer lstElements)
        {
            CResultAErreur result  = CResultAErreur.True;
            CDbKey         keyUser = null;
            //Attend la fin des transactions en cours pour la session principale
            IDatabaseConnexion cnx = null;

            do
            {
                CSessionClient session = CSessionClient.GetSessionForIdSession(lstElements.IdSession);
                if (session != null && session.IsConnected)
                {
                    IInfoUtilisateur info = session.GetInfoUtilisateur();
                    //TESTDBKEYOK
                    if (info != null)
                    {
                        keyUser = info.KeyUtilisateur;
                    }
                    try
                    {
                        cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(lstElements.IdSession, typeof(CProjet));
                    }
                    catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller !
                    {
                        cnx = null;
                    }
                    System.Threading.Thread.Sleep(50);
                }
                else
                {
                    cnx = null;
                }
            }while (cnx != null && cnx.IsInTrans());
            lock (typeof(CLockerStartEtape))//S'assure que deux étapes ne démarrent pas en même temps !
            {
                CAuthentificationSessionProcess auth = new CAuthentificationSessionProcess();

                using (CSessionClient sousSession = CSessionClient.CreateInstance())
                {
                    try
                    {
                        sousSession.OpenSession(auth, "Projet asynchronous calc ", ETypeApplicationCliente.Process);
                        if (keyUser != null)
                        {
                            sousSession.ChangeUtilisateur(keyUser);
                        }
                        using (CContexteDonnee ctx = new CContexteDonnee(sousSession.IdSession, true, true))
                        {
                            SetModeCalculProjet(ctx);
                            foreach (int nIdProjet in lstElements.IdsProjets)
                            {
                                CProjet projet = new CProjet(ctx);
                                if (projet.ReadIfExists(nIdProjet))
                                {
                                    projet.RecalculateDates(false);
                                }
                            }
                            foreach (int nIdMetaProjet in lstElements.IdsMetaProjets)
                            {
                                CMetaProjet meta = new CMetaProjet(ctx);
                                if (meta.ReadIfExists(nIdMetaProjet))
                                {
                                    meta.UpdateDateDebutPlanifieeFromChilds(false);
                                    meta.UpdateDateFinPlanifieeFromChilds(false);
                                    meta.UpdateDateDebutReelleFromChilds(false);
                                    meta.UpdateDateFinReelleFromChilds(false);
                                    meta.CalcProgress(false);
                                }
                            }

                            result = ctx.SaveAll(false);
                        }
                    }
                    catch (Exception e)
                    {
                    }
                    finally
                    {
                        sousSession.CloseSession();
                    }
                }
            }
        }