Пример #1
0
        /// <summary>
        /// Vérifie que la coordonnée demandée est valide pour le fils demandé dans le
        /// parent demandé
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="fils"></param>
        /// <param name="strCoordonnee"></param>
        /// <returns></returns>
        public static CResultAErreur VerifieCoordonneeFils(IObjetAFilsACoordonnees parent, IObjetACoordonnees fils, string strCoordonnee)
        {
            CResultAErreur result = CResultAErreur.True;

            ///Vérifie qu'on a ce qu'il faut pour bosser !!
            if (parent == null)
            {
                result.EmpileErreur(I.T("Impossible to check the coordinates of an object which is not positioned|259"));
                return(result);
            }
            if (fils == null)
            {
                return(result);
            }
            CParametrageSystemeCoordonnees parametrage = parent.ParametrageCoordonneesApplique;

            if (parametrage == null || parametrage.SystemeCoordonnees == null)
            {
                return(result);
            }

            EOptionControleCoordonnees?optionControle = parent.OptionsControleCoordonneesApplique;

            if (optionControle == null)
            {
                optionControle = COptionCoordonnéeGlobale.GetOptionType(fils.ContexteDonnee.IdSession, parent.GetType());
            }

            if (!IsAppliquable(optionControle.Value, fils))
            {
                return(result);
            }

            //Test Coordonnée vide
            if (strCoordonnee == "")
            {
                if ((optionControle & EOptionControleCoordonnees.IgnorerLesFilsSansCoordonnees) == EOptionControleCoordonnees.IgnorerLesFilsSansCoordonnees)
                {
                    return(result);
                }
                else
                {
                    result.EmpileErreur(I.T("Mandatory coordinate|258"));
                    return(result);
                }
            }

            ///Vérifie que la coordonnée  a le bon format
            result = parametrage.VerifieCoordonnee(strCoordonnee);
            if (!result)
            {
                return(result);
            }
            string strCoordonneeFin = strCoordonnee;

            COccupationCoordonnees occupation = fils.OccupationCoordonneeAppliquee;

            //Prend en compte l'occupation
            if ((optionControle & EOptionControleCoordonnees.IgnorerLoccupation) != EOptionControleCoordonnees.IgnorerLoccupation)
            {
                if (occupation == null)
                {
                    result.EmpileErreur(I.T("No occupation defined : control is impossible|256"));
                    return(result);
                }
                if (occupation.NbUnitesOccupees < 1)
                {
                    result.EmpileErreur(I.T("Incorrect number of occupied units|257"));
                    return(result);
                }
                if (occupation.NbUnitesOccupees != 1)                //1->coord fin = coord début !
                {
                    result = parametrage.SystemeCoordonnees.AjouteDansNiveau(strCoordonnee, occupation.NbUnitesOccupees - 1);
                    if (!result)
                    {
                        return(result);
                    }
                    strCoordonneeFin = (string)result.Data;
                    //Vérifie que la coordonnée de fin est correcte
                    result = parametrage.VerifieCoordonnee(strCoordonneeFin);
                    if (!result)
                    {
                        return(result);
                    }
                }
            }

            //Vérifie que l'unité est cohérente
            if ((optionControle & EOptionControleCoordonnees.IgnorerLesUnites) != EOptionControleCoordonnees.IgnorerLesUnites &&
                !fils.IgnorerUnite)
            {
                if (occupation == null)
                {
                    result.EmpileErreur(I.T("No occupation defined  : control is impossible|256"));
                    return(result);
                }
                result = parametrage.SystemeCoordonnees.VerifieUnite(strCoordonnee, occupation.Unite);
                if (!result)
                {
                    return(result);
                }
            }

            //Vérifie que la coordonnée n'est pas déjà occupée
            if ((optionControle & EOptionControleCoordonnees.AutoriserPlusieursFilsSurLaMemeCoordonnee) != EOptionControleCoordonnees.AutoriserPlusieursFilsSurLaMemeCoordonnee)
            {
                List <IObjetACoordonnees> lstobj = new List <IObjetACoordonnees>();
                lstobj = parent.FilsACoordonnees;

                //On exclu l'objet actuel si il est déjà présent car il ne peut pas rentrer en conflit avec lui même
                if (lstobj.Contains(fils))
                {
                    lstobj.Remove(fils);
                }

                result = parametrage.Test_Interactions(strCoordonnee, strCoordonneeFin, lstobj);
            }
            result.Data = null;
            return(result);
        }