Exemplo n.º 1
0
        //------------------------------------------------------
        /// <summary>
        /// Ajoute un predecesseur et crée le lien projet
        /// </summary>
        /// <param name="element"></param>
        public CResultAErreur AddPredecesseur(IElementDeGantt element)
        {
            CResultAErreur result = CResultAErreur.True;

            if (!m_listePredecesseurs.Contains(element))
            {
                CElementDeGanttProjet eltThis         = this as CElementDeGanttProjet;
                CElementDeGanttProjet eltPredecesseur = element as CElementDeGanttProjet;
                if (eltThis != null && eltPredecesseur != null)
                {
                    CLienDeProjet lien = eltThis.ProjetAssocie.AddPredecessor(eltPredecesseur.ProjetAssocie);
                    if (lien != null)
                    {
                        m_listePredecesseurs.Add(eltPredecesseur);
                    }

                    /*new CLienDeProjet(eltThis.ProjetAssocie.ContexteDonnee);
                     * lien.CreateNewInCurrentContexte();
                     * lien.ProjetA = eltPredecesseur.ProjetAssocie;
                     * lien.ProjetB = eltThis.ProjetAssocie;
                     * result = lien.ControleCoherenceLien();
                     * if (!result)
                     * lien.CancelCreate();
                     * else
                     * m_listePredecesseurs.Add(element);
                     * eltPredecesseur.ProjetAssocie.OptimizeDates(eltPredecesseur.ProjetAssocie.DateDebutGantt);*/
                }
            }
            return(result);
        }
Exemplo n.º 2
0
        //------------------------------------------------------
        public void RegroupeBarresEnMulti()
        {
            //trouve les idgantt avec plusieurs projets
            Dictionary <string, List <CElementDeGanttProjet> > dicMultiToProjets = new Dictionary <string, List <CElementDeGanttProjet> >();

            foreach (IElementDeGantt elt in ElementsFils.ToArray())
            {
                CElementDeGanttProjet eltPrj = elt as CElementDeGanttProjet;
                if (eltPrj != null && eltPrj.ProjetAssocie.GanttId.Length > 0)
                {
                    List <CElementDeGanttProjet> lst = null;
                    if (!dicMultiToProjets.TryGetValue(eltPrj.ProjetAssocie.GanttId, out lst))
                    {
                        lst = new List <CElementDeGanttProjet>();
                        dicMultiToProjets[eltPrj.ProjetAssocie.GanttId] = lst;
                    }
                    lst.Add(eltPrj);
                }
            }


            Dictionary <string, CElementDeGanttMulti> dicMultis = new Dictionary <string, CElementDeGanttMulti>();

            foreach (List <CElementDeGanttProjet> lstPrjs in dicMultiToProjets.Values)
            {
                if (lstPrjs.Count > 1)
                {
                    foreach (CElementDeGanttProjet eltProjet in lstPrjs)
                    {
                        CElementDeGanttMulti eltMulti = null;
                        if (!dicMultis.TryGetValue(eltProjet.ProjetAssocie.GanttId, out eltMulti))
                        {
                            eltMulti = new CElementDeGanttMulti(this, eltProjet.Libelle, eltProjet.ProjetAssocie.GanttId);
                            dicMultis[eltProjet.ProjetAssocie.GanttId] = eltMulti;
                        }
                        //Ajoute le fils
                        eltMulti.AddElementDeLaLigne(eltProjet);
                        eltProjet.ElementParent = null;
                        foreach (IElementDeGantt eltFils in eltProjet.ElementsFils.ToArray())
                        {
                            eltFils.ElementParent = eltMulti;
                        }
                    }
                }
            }

            //Regroupe les barres des fils
            foreach (IElementDeGantt elt in ElementsFils.ToArray())
            {
                elt.RegroupeBarresEnMulti();
            }
        }
Exemplo n.º 3
0
        //-----------------------------------------------
        public void AddChildsTrouvesParmis(Dictionary <int, List <CProjet> > dicIdsToChilds)
        {
            List <CProjet> lstFils = null;

            if (dicIdsToChilds.TryGetValue(ProjetAssocie.Id, out lstFils))
            {
                foreach (CProjet projet in lstFils)
                {
                    CElementDeGanttProjet eltFils = new CElementDeGanttProjet(this, projet);
                    eltFils.AddChildsTrouvesParmis(dicIdsToChilds);
                }
            }
        }
Exemplo n.º 4
0
        //------------------------------------------------------
        public void RemovePredecesseur(IElementDeGantt element)
        {
            //supprime le lien projet
            CElementDeGanttProjet predecesseur = element as CElementDeGanttProjet;
            CElementDeGanttProjet thisProjet   = this as CElementDeGanttProjet;

            if (predecesseur != null && thisProjet != null)
            {
                //Trouve le lien
                foreach (CLienDeProjet lien in predecesseur.ProjetAssocie.LiensDeProjetAttaches)
                {
                    if ((lien.ProjetA == predecesseur.ProjetAssocie && lien.ProjetB == thisProjet.ProjetAssocie) ||
                        lien.ProjetB == predecesseur.ProjetAssocie && lien.ProjetA == thisProjet.ProjetAssocie)
                    {
                        if (!lien.Delete(true))
                        {
                            return;
                        }
                        break;
                    }
                }
            }
            m_listePredecesseurs.Remove(element);
        }
Exemplo n.º 5
0
        //--------------------------------------------------------------------------------------
        private static CResultAErreur PrepareGantt(
            CParametreNiveauArbreGanttGroupe groupeRacine, 
            CResultAErreur result, 
            CElementDeGantt elementRacine, 
            List<CProjet> lstProjets, 
            CContexteDonnee contexteDeTravail)
        {
            //Isole tous les projets qui n'ont pas leur parent dans la liste des sélectionnés
            HashSet<int> dicsIds = new HashSet<int>();
            foreach (CProjet prj in lstProjets)
                dicsIds.Add(prj.Id);

            /*IEnumerable<CProjet> lstSansRacine = from p in lstProjets
                                                 where
                                                 p.Row[CProjet.c_champIdParent] == DBNull.Value ||
                                                 !dicsIds.Contains((int)p.Row[CProjet.c_champIdParent])
                                                 select p;*/
            List<CProjet> lstSansRacine = new List<CProjet>();
            foreach (CProjet p in lstProjets)
            {
                if (p.Row[CProjet.c_champIdParent] == DBNull.Value ||
                   !dicsIds.Contains((int)p.Row[CProjet.c_champIdParent]))
                    lstSansRacine.Add(p);
            }
            //Crée tous les éléments projet(avant regroupement)           
            List<CElementDeGanttProjet> lstRacines = new List<CElementDeGanttProjet>();
            Dictionary<int, List<CProjet>> dicIdProjetToChild = new Dictionary<int, List<CProjet>>();
            foreach (CProjet projetTest in lstProjets)
            {
                if (projetTest.Row[CProjet.c_champIdParent] != DBNull.Value)
                {
                    int nId = (int)projetTest.Row[CProjet.c_champIdParent];
                    List<CProjet> lstChilds = null;
                    if (!dicIdProjetToChild.TryGetValue(nId, out lstChilds))
                    {
                        lstChilds = new List<CProjet>();
                        dicIdProjetToChild[nId] = lstChilds;
                    }
                    lstChilds.Add(projetTest);
                }
            }
            foreach (CProjet prj in lstSansRacine)
            {
                CElementDeGanttProjet eltProjet = new CElementDeGanttProjet(elementRacine, prj);
                eltProjet.AddChildsTrouvesParmis(dicIdProjetToChild);
                lstRacines.Add(eltProjet);
            }

            CParametreNiveauArbreGanttGroupe groupe = groupeRacine;
            if (groupe != null)
                groupe.RangeProjets(lstRacines, elementRacine);

            elementRacine.RegroupeBarresEnMulti();


            CBaseGantt baseGantt = new CBaseGantt(elementRacine);
            result.Data = baseGantt;
            //Création des liens
            StringBuilder blIdsProjets = new StringBuilder();
            Dictionary<int, CElementDeGantt> dicIdProjetToElements = new Dictionary<int, CElementDeGantt>(baseGantt.GetElements().Count());
            HashSet<CLienDeProjet> lstLiensConcernes = new HashSet<CLienDeProjet>();

            //IDentifie les relations vers les liens
            List<DataRelation> lstRelationsToLien = new List<DataRelation>();
            foreach (DataRelation rel in contexteDeTravail.Tables[CProjet.c_nomTable].ChildRelations)
            {
                if (rel.ChildTable.TableName == CLienDeProjet.c_nomTable)
                    lstRelationsToLien.Add(rel);
            }

            foreach ( IElementDeGantt elt in baseGantt.GetElements() )
            {
                foreach (IElementDeGantt eltDraw in elt.ElementsADessinerSurLaLigne)
                {
                    CElementDeGanttProjet eltPrj = eltDraw as CElementDeGanttProjet;
                    if (eltPrj != null)
                    {
                        int nId = eltPrj.ProjetAssocie.Id;
                        dicIdProjetToElements[nId] = eltPrj;
                        blIdsProjets.Append(nId);
                        blIdsProjets.Append(",");
                        foreach ( DataRelation rel in lstRelationsToLien )
                        {
                            DataRow[] rows = eltPrj.ProjetAssocie.Row.Row.GetChildRows ( rel );
                            foreach ( DataRow row in rows )
                                lstLiensConcernes.Add ( new CLienDeProjet ( row ));
                        }
                    }
                }
            }

            /*CListeObjetsDonnees lstLiensConcernes = new CListeObjetsDonnees(contexteDeTravail, typeof(CLienDeProjet));
            if (blIdsProjets.Length > 0)
            {
                blIdsProjets.Remove(blIdsProjets.Length - 1, 1);
                lstLiensConcernes.Filtre = new CFiltreData(CLienDeProjet.c_champPrjA + " in (" +
                    blIdsProjets.ToString() + ") or " +
                    CLienDeProjet.c_champPrjB + " in (" +
                    blIdsProjets.ToString() + ")");
            }
            else
                lstLiensConcernes.Filtre = new CFiltreDataImpossible();
            lstLiensConcernes.InterditLectureInDB = true;
            lstLiensConcernes.AssureLectureFaite();*/
            foreach (CLienDeProjet lien in lstLiensConcernes)
            {
                CElementDeGantt eltPredecesseur = null;
                CElementDeGantt eltSuccesseur = null;
                if (dicIdProjetToElements.TryGetValue(lien.ProjetA.Id, out eltPredecesseur) &&
                    dicIdProjetToElements.TryGetValue(lien.ProjetB.Id, out eltSuccesseur))
                {
                    eltSuccesseur.AddPredecesseurSansCreation(eltPredecesseur);
                }
            }
            

            
            try
            {
                elementRacine.RecalculAvancement();
            }
            catch (Exception e)
            {
            }
            return result;
        }
Exemplo n.º 6
0
        // /////////////////////////////////////////////////////////
        /// <summary>
        /// Le data du result contient un IBaseGantt
        /// </summary>
        /// <returns></returns>
        public static CResultAErreur CreateGantt ( 
            CProjet projet, 
            CParametreNiveauArbreGanttGroupe groupeRacine,
            CFiltreData filtreElements )
        {
            CResultAErreur result = CResultAErreur.True;
            if (projet == null)
                return result;
            CElementDeGanttProjet elementRacine = new CElementDeGanttProjet(null, projet);
            if (!result)
                return result;
            List<CProjet> lstProjets = new List<CProjet>();
            if (!projet.IsNew())//Si le projet est nouveau, on ne peut pas filtrer
                //car les éléments ne sont pas encore en base
            {
                CFiltreData filtre = result.Data as CFiltreData;
                filtre = CFiltreData.GetAndFiltre(filtreElements,
                    new CFiltreData(CProjet.c_champCodeSystemeComplet + " like @1 and " +
                        CProjet.c_champId + "<>@2",
                        projet.CodeSystemeComplet + "%",
                        projet.Id));
                CListeObjetsDonnees lstObjetProjets = new CListeObjetsDonnees(projet.ContexteDonnee, typeof(CProjet), filtre);

                lstObjetProjets.PreserveChanges = true;
                lstObjetProjets.ModeSansTri = true;
                lstProjets.AddRange(lstObjetProjets.ToList<CProjet>());


                lstObjetProjets.ReadDependances("ProjetsFils","LiensEnTantQueProjetA", "LiensEnTantQueProjetB", "ContraintesPropres", "AnomaliesDuProjet");
                CUtilElementAChamps.ReadChampsCustom(lstObjetProjets);
            }
            //Il faut ajouter les projets qui ne sont pas encore en base et qui n'ont donc pas de code system
            List<CProjet> lstALire = new List<CProjet>();
            lstALire.Add(projet);
            DataRelation relation = null;
            foreach ( DataRelation rel in projet.ContexteDonnee.Tables[CProjet.c_nomTable].ChildRelations )
            {
                if ( rel.ChildTable.TableName == CProjet.c_nomTable )
                {
                    relation = rel;
                    break;
                }
            }
            while (lstALire.Count > 0 && relation != null)
            {
                List<CProjet> prochaineGeneration = new List<CProjet>();
                foreach (CProjet test in lstALire)
                {
                    DataRow[] rowsDeps = test.Row.Row.GetChildRows(relation);
                    foreach (DataRow row in rowsDeps)
                    {
                        if (row.RowState != DataRowState.Deleted)
                        {
                            CProjet prj = new CProjet(row);
                            if (prj.IsNew() && !lstProjets.Contains(prj) )
                            {
                                lstProjets.Add(prj);
                                
                            }
                            prochaineGeneration.Add(prj);
                        }
                    }
                }
                lstALire = prochaineGeneration;
            }
           
            

            
            //Comme on est passé par un filtre Avancé, les nouveaux éléments ne sont
            //pas dans la liste. On les ajoute donc !
            //Vérifie qu'il y a des éléments dont l'id est négatif
            CListeObjetsDonnees lstTmp = new CListeObjetsDonnees(projet.ContexteDonnee,
                typeof(CProjet));
            lstTmp.Filtre = new CFiltreData(CProjet.c_champId + "<@1", 0);
            lstTmp.InterditLectureInDB = true;
            if (lstTmp.Count > 0)//Il y a des projets tous neufs dans le contexte
            {
                foreach (CProjet projetTmp in new ArrayList(lstProjets))
                {
                    //N'utilise pas ProjetsFils pour ne pas lire dans la base
                    CListeObjetsDonnees lstFils = new CListeObjetsDonnees(projet.ContexteDonnee,
                        typeof(CProjet),
                        new CFiltreData(CProjet.c_champIdParent + "=@1", projetTmp.Id));
                    lstFils.InterditLectureInDB = true;
                    lstFils.Filtre = new CFiltreData(CProjet.c_champId + "<0");
                    foreach (CProjet projetFils in lstFils)
                        if (!lstProjets.Contains(projetFils))
                            lstProjets.Add(projetFils);
                }
                //Les nouveaux sous projet du projet principal doivent également être ajoutés
                CListeObjetsDonnees lstFilsPrincipal = projet.ProjetsFils;
                lstFilsPrincipal.Filtre = new CFiltreData(CProjet.c_champId + "<0");
                foreach (CProjet projetFils in lstFilsPrincipal)
                    if (!lstProjets.Contains(projetFils))
                        lstProjets.Add(projetFils);
            }
            CContexteDonnee contexteDeTravail = projet.ContexteDonnee;

            return PrepareGantt(groupeRacine,result, elementRacine, lstProjets, contexteDeTravail);
        }