//----------------------------------------
        public override bool Equals(object obj)
        {
            if (!(obj is C2iChampDeRequete))
            {
                return(false);
            }
            C2iChampDeRequete champ = (C2iChampDeRequete)obj;

            if (champ.NomChamp != NomChamp)
            {
                return(false);
            }
            if (champ.FonctionSql != FonctionSql)
            {
                return(false);
            }
            if (champ.TypeDonneeAvantAgregation != TypeDonneeAvantAgregation)
            {
                return(false);
            }
            if (champ.OperationAgregation != this.OperationAgregation)
            {
                return(false);
            }
            if (champ.GroupBy != GroupBy)
            {
                return(false);
            }
            if (champ.Sources.Length != Sources.Length)
            {
                return(false);
            }
            for (int nSource = 0; nSource < champ.Sources.Length; nSource++)
            {
                if (!champ.Sources[nSource].Equals(Sources[nSource]))
                {
                    return(false);
                }
            }
            return(true);
        }
Exemple #2
0
        //-------------------------------------
        /// <summary>
        /// Retourne tous les fils qui étaient affecté à l'objet à l'époque
        /// </summary>
        /// <param name="objet"></param>
        /// <param name="relationFille"></param>
        /// <returns></returns>
        public int[] GetIdsChildsHistoriques(CObjetDonneeAIdNumerique objet, CInfoRelation relationFille)
        {
            Type tpFils = CContexteDonnee.GetTypeForTable(relationFille.TableFille);

            if (!typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpFils))
            {
                return(new int[0]);
            }
            CChampPourVersionInDb champFille = new CChampPourVersionInDb(relationFille.ChampsFille[0], "");
            //Recherche toutes les modifications de la propriété fille
            CListeObjetsDonnees listeModifsFilles = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CVersionDonneesObjetOperation));

            listeModifsFilles.Filtre = new CFiltreDataAvance(
                CVersionDonneesObjetOperation.c_nomTable,
                CVersionDonneesObjetOperation.c_champChamp + "=@1 and " +
                CVersionDonneesObjetOperation.c_champTypeChamp + "=@2 and " +
                CVersionDonneesObjet.c_nomTable + "." +
                CVersionDonneesObjet.c_champTypeElement + "=@3 and " +
                CVersionDonneesObjet.c_nomTable + "." +
                CVersionDonnees.c_nomTable + "." +
                CVersionDonnees.c_champTypeVersion + "=@4 and " +
                CVersionDonneesObjet.c_nomTable + "." +
                CVersionDonnees.c_champId + ">=@5",
                champFille.FieldKey,
                champFille.TypeChampString,
                tpFils.ToString(),
                (int)CTypeVersion.TypeVersion.Archive,
                Id);
            listeModifsFilles.Tri = CVersionDonneesObjetOperation.c_champId + " desc";
            listeModifsFilles.ReadDependances("VersionObjet");

            ArrayList lstFils = new ArrayList();

            //Remplit la liste des fils avec les fils actuels
            //Récupère la liste de tous les fils actuels
            //et supprimés depuis. En effet, un element supprimé depuis cette version mais qui est
            //toujours lié à l'objet était donc lié à l'objet à l'époque
            C2iRequeteAvancee requete = new C2iRequeteAvancee(-1);

            requete.TableInterrogee = relationFille.TableFille;
            C2iChampDeRequete champDeRequete = new C2iChampDeRequete("ID",
                                                                     new CSourceDeChampDeRequete(objet.ContexteDonnee.GetTableSafe(relationFille.TableFille).PrimaryKey[0].ColumnName),
                                                                     typeof(int),
                                                                     OperationsAgregation.None,
                                                                     true);

            requete.ListeChamps.Add(champDeRequete);
            CFiltreData filtre = new CFiltreData(relationFille.ChampsFille[0] + "=@1 and (" +
                                                 CSc2iDataConst.c_champIdVersion + " is null or " +
                                                 CSc2iDataConst.c_champIdVersion + ">=@2)",
                                                 objet.Id,
                                                 Id);

            filtre.IgnorerVersionDeContexte = true;
            requete.FiltreAAppliquer        = filtre;
            CResultAErreur result = requete.ExecuteRequete(objet.ContexteDonnee.IdSession);

            if (result)
            {
                foreach (DataRow row in ((DataTable)result.Data).Rows)
                {
                    lstFils.Add(row[0]);
                }
            }


            foreach (CVersionDonneesObjetOperation data in listeModifsFilles)
            {
                if (data.GetValeur() is int && (int)data.GetValeur() == objet.Id)
                {
                    if (!lstFils.Contains(data.VersionObjet.IdElement))
                    {
                        lstFils.Add(data.VersionObjet.IdElement);
                    }
                }
                else
                {
                    lstFils.Remove(data.VersionObjet.IdElement);
                }
            }

            //Toutes les entités créées après la version ont également été ajoutées,
            //Donc n'y étaient pas
            if (lstFils.Count > 0)
            {
                StringBuilder builder = new StringBuilder();
                foreach (int nId in lstFils)
                {
                    builder.Append(nId.ToString());
                    builder.Append(",");
                }
                string strIds = builder.ToString();
                strIds  = strIds.Substring(0, strIds.Length - 1);
                requete = new C2iRequeteAvancee(-1);
                requete.TableInterrogee  = CVersionDonneesObjet.c_nomTable;
                requete.FiltreAAppliquer = new CFiltreData(
                    CVersionDonneesObjet.c_champIdElement + " in (" + strIds + ") and " +
                    CVersionDonneesObjet.c_champTypeElement + "=@1 and " +
                    CVersionDonneesObjet.c_champTypeOperation + "=@2 and " +
                    CVersionDonnees.c_champId + ">=@3",
                    tpFils.ToString(),
                    CTypeOperationSurObjet.TypeOperation.Ajout,
                    Id);
                requete.FiltreAAppliquer.IgnorerVersionDeContexte = true;
                requete.ListeChamps.Add(new C2iChampDeRequete("Id",
                                                              new CSourceDeChampDeRequete(CVersionDonneesObjet.c_champIdElement),
                                                              typeof(int),
                                                              OperationsAgregation.None,
                                                              true));
                result = requete.ExecuteRequete(ContexteDonnee.IdSession);
                if (result)
                {
                    foreach (DataRow row in ((DataTable)result.Data).Rows)
                    {
                        lstFils.Remove(row[0]);
                    }
                }
            }
            return((int[])lstFils.ToArray(typeof(int)));
        }