Beispiel #1
0
 public static bool IsAppliquable(EOptionControleCoordonnees optionControle, IObjetACoordonnees fils)
 {
     if (fils.GetType() == typeof(CEquipement))
     {
         if ((optionControle & EOptionControleCoordonnees.IgnorerLesEquipements) == EOptionControleCoordonnees.IgnorerLesEquipements)
         {
             return(false);
         }
     }
     if (fils.GetType() == typeof(CSite))
     {
         if ((optionControle & EOptionControleCoordonnees.IgnorerLesSites) == EOptionControleCoordonnees.IgnorerLesSites)
         {
             return(false);
         }
     }
     if (fils.GetType() == typeof(CStock))
     {
         if ((optionControle & EOptionControleCoordonnees.IgnorerLesStocks) == EOptionControleCoordonnees.IgnorerLesStocks)
         {
             return(false);
         }
     }
     return(true);
 }
        /// <summary>
        /// Retourne une liste d'objet correspondant à la coordonnée souhaitée
        /// selon un critère de recherche
        /// </summary>
        /// <param name="coor"></param>
        /// <param name="criteresTypeObjets"></param>
        /// <param name="ctx"></param>
        /// <returns></returns>
        public static List <IObjetACoordonnees> FindObjetsACoordonnees(
            string coor,
            EObjetACoordonnee?criteresTypeObjets,
            IObjetACoordonnees parent,
            CContexteDonnee ctx)
        {
            m_ctx = ctx;

            List <IObjetACoordonnees> lstObjACoor = new List <IObjetACoordonnees>();

            IDsEOsParent            = new List <string>();
            IDsSitesParent          = new List <string>();
            IDsStocksParent         = new List <string>();
            IDsEqtsParent           = new List <string>();
            lstEOsEnStandBy         = new List <CObjetACoordonneesEnStandBy>();
            lstSitesEnStandBy       = new List <CObjetACoordonneesEnStandBy>();
            lstStocksEnStandBy      = new List <CObjetACoordonneesEnStandBy>();
            lstEquipementsEnStandBy = new List <CObjetACoordonneesEnStandBy>();
            lstEOsPoss         = new List <CObjetACoordonneesPossible>();
            lstSitesPoss       = new List <CObjetACoordonneesPossible>();
            lstStocksPoss      = new List <CObjetACoordonneesPossible>();
            lstEquipementsPoss = new List <CObjetACoordonneesPossible>();


            bool EOsExists    = true;
            bool SitesExists  = true;
            bool StocksExists = true;
            bool EqtsExists   = true;

            FirstSearch = true;

            #region 1 - Determination des critères (ou domaine) de recherche
            if (!((criteresTypeObjets & EObjetACoordonnee.EntiteOrganisationnelle) == EObjetACoordonnee.EntiteOrganisationnelle) ||
                criteresTypeObjets == null)
            {
                EOsExists = false;
            }

            if (!((criteresTypeObjets & EObjetACoordonnee.Site) == EObjetACoordonnee.Site) ||
                criteresTypeObjets == null)
            {
                SitesExists = false;
            }

            if (!((criteresTypeObjets & EObjetACoordonnee.Stock) == EObjetACoordonnee.Stock) ||
                criteresTypeObjets == null)
            {
                StocksExists = false;
            }

            if (!((criteresTypeObjets & EObjetACoordonnee.Equipement) == EObjetACoordonnee.Equipement) ||
                criteresTypeObjets == null)
            {
                EqtsExists = false;
            }
            #endregion

            #region  2 - Recherche des IObjetACoordonnees en descendant niveau par niveau
            string[] levels = coor.Split(CSystemeCoordonnees.c_separateurNumerotations);

            if (levels.Length == 0)
            {
                return(lstObjACoor);
            }

            if (parent != null)
            {
                CObjetACoordonneesPossible obj = new CObjetACoordonneesPossible(((IObjetDonneeAIdNumerique)parent).Id.ToString(), parent.Coordonnee);
                if (parent.GetType() == typeof(CEntiteOrganisationnelle))
                {
                    m_lstEOsPoss.Add(obj);
                }
                if (parent.GetType() == typeof(CSite))
                {
                    m_lstSitesPoss.Add(obj);
                }
                if (parent.GetType() == typeof(CStock))
                {
                    m_lstStocksPoss.Add(obj);
                }
                if (parent.GetType() == typeof(CEquipement))
                {
                    m_lstEqtsPoss.Add(obj);
                }
                FirstSearch = false;
            }


            for (int level = 0; level < levels.Length; level++)
            {
                int nbEOs    = 0;
                int nbSites  = 0;
                int nbStocks = 0;
                int nbEqts   = 0;

                lstEOsPoss         = new List <CObjetACoordonneesPossible>();
                lstSitesPoss       = new List <CObjetACoordonneesPossible>();
                lstStocksPoss      = new List <CObjetACoordonneesPossible>();
                lstEquipementsPoss = new List <CObjetACoordonneesPossible>();

                //WakeUp
                WakeUpObjs(levels[level]);

                //EOs
                nbEOs += FindFilsACoor(EObjetACoordonnee.EntiteOrganisationnelle, levels[level]);

                //Sites
                nbSites += FindFilsACoor(EObjetACoordonnee.Site, levels[level]);

                //Stocks
                nbStocks += FindFilsACoor(EObjetACoordonnee.Stock, levels[level]);

                //Equipements
                nbEqts += FindFilsACoor(EObjetACoordonnee.Equipement, levels[level]);


                FirstSearch = false;



                //Mise en Stand By
                int nextLevel = level + 1;
                if (nextLevel < levels.Length)
                {
                    List <string> LevelsSuivants = new List <string>();
                    for (int nl = nextLevel; nl < levels.Length; nl++)
                    {
                        LevelsSuivants.Add(levels[nl]);
                    }

                    MiseEnStandBy(LevelsSuivants);
                }


                //if (nbEOs == 0 && lstEOsEnStandBy.Count == 0)
                //    EOsExists = false;
                //if (nbEqts == 0 && lstEquipementsEnStandBy.Count == 0)
                //    EqtsExists = false;
                //if (nbStocks == 0 && lstStocksEnStandBy.Count == 0)
                //    StocksExists = false;
                //if (nbSites == 0 && lstStocksEnStandBy.Count == 0)
                //    SitesExists = false;

                if (!(EOsExists && SitesExists && StocksExists && EqtsExists))
                {
                    return(lstObjACoor);
                }
            }
            #endregion

            // 3 - On ajoute les objets restant en stand by
            // 3 - Ajout des IObjetACoordonnees trouvés à la liste
            if (EOsExists)
            {
                foreach (CObjetACoordonneesEnStandBy o in lstEOsEnStandBy)
                {
                    lstEOsPoss.Add(new CObjetACoordonneesPossible(o));
                }

                if (lstEOsPoss.Count > 0)
                {
                    AddIObjetACoorOfIDs(ref lstObjACoor, EObjetACoordonnee.EntiteOrganisationnelle);
                }
            }
            if (SitesExists)
            {
                foreach (CObjetACoordonneesEnStandBy o in lstSitesEnStandBy)
                {
                    lstSitesPoss.Add(new CObjetACoordonneesPossible(o));
                }

                if (lstSitesPoss.Count > 0)
                {
                    AddIObjetACoorOfIDs(ref lstObjACoor, EObjetACoordonnee.Site);
                }
            }
            if (StocksExists)
            {
                foreach (CObjetACoordonneesEnStandBy o in lstStocksEnStandBy)
                {
                    lstStocksPoss.Add(new CObjetACoordonneesPossible(o));
                }

                if (lstStocksPoss.Count > 0)
                {
                    AddIObjetACoorOfIDs(ref lstObjACoor, EObjetACoordonnee.Stock);
                }
            }
            if (EqtsExists)
            {
                foreach (CObjetACoordonneesEnStandBy o in lstEquipementsEnStandBy)
                {
                    lstEquipementsPoss.Add(new CObjetACoordonneesPossible(o));
                }

                if (lstEquipementsPoss.Count > 0)
                {
                    AddIObjetACoorOfIDs(ref lstObjACoor, EObjetACoordonnee.Equipement);
                }
            }

            return(lstObjACoor);
        }