예제 #1
0
        /// /////////////////////////////////////////////////////////////
        /// <summary>
        /// Crée un attribut relation décrivant la relation qui lie la donnée cumulée au type demandé
        /// </summary>
        /// <param name="tp"></param>
        /// <returns></returns>
        public RelationAttribute GetRelationAttributeToType(Type tp)
        {
            int nCle = 0;

            foreach (CCleDonneeCumulee cle in Parametre.ChampsCle)
            {
                if (cle.TypeLie != null && cle.TypeLie == tp)
                {
                    CObjetDonneeAIdNumerique obj  = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tp, new object[] { ContexteDonnee });
                    RelationAttribute        attr = new RelationAttribute(
                        obj.GetNomTable(),
                        obj.GetChampId(),
                        CDonneeCumulee.GetNomChampCle(nCle),
                        false,
                        true,
                        false);
                    return(attr);
                }
                nCle++;
            }
            return(null);
        }
예제 #2
0
        /// /////////////////////////////////////////////////////////////
        public CListeObjetsDonnees GetDonneesCumuleesForObjet(CObjetDonneeAIdNumerique objet)
        {
            //Trouve le champ du paramètre qui est lié au type de l'objet lié
            CParametreDonneeCumulee parametre = Parametre;
            int    nCle        = 0;
            string strChampCle = "";

            foreach (CCleDonneeCumulee cle in parametre.ChampsCle)
            {
                if (cle.TypeLie != null && cle.TypeLie == objet.GetType())
                {
                    strChampCle = CDonneeCumulee.GetNomChampCle(nCle);
                    break;
                }
                else
                {
                    nCle++;
                }
            }
            CListeObjetsDonnees listeVide = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CDonneeCumulee));

            listeVide.Filtre = new CFiltreDataImpossible();
            if (strChampCle == "")
            {
                return(listeVide);
            }

            CFiltreData filtre = new CFiltreData(
                CTypeDonneeCumulee.c_champId + "=@1 and " +
                strChampCle + "=@2",
                this.Id,
                objet.Id.ToString());
            CListeObjetsDonnees liste = new CListeObjetsDonnees(objet.ContexteDonnee, typeof(CDonneeCumulee));

            liste.Filtre = filtre;
            return(liste);
        }
        //-----------------------------------------------------------------
        /// <summary>
        /// Le data du result contient le datatable correspondant à ce paramètre de visu
        /// </summary>
        /// <returns></returns>
        public CResultAErreur GetDataTable(CContexteDonnee contexteDonnee)
        {
            CResultAErreur     result     = CResultAErreur.True;
            CTypeDonneeCumulee typeDonnee = GetTypeDonneeCumulee(contexteDonnee);

            if (typeDonnee == null)
            {
                result.EmpileErreur(I.T("Unable to load Precalculated data type|20041"));
                return(result);
            }
            CListeObjetsDonnees lstDatas = new CListeObjetsDonnees(
                contexteDonnee,
                typeof(CDonneeCumulee),
                new CFiltreData(CTypeDonneeCumulee.c_champId + "=@1", m_nIdTypeDonneeCumulee));

            CParametreDonneeCumulee parametre = typeDonnee.Parametre;

            #region Filtrage des données
            CFiltreData filtreDonnees = null;
            int         nCle          = 0;
            foreach (CCleDonneeCumulee cle in parametre.ChampsCle)
            {
                if (cle.Champ != null && cle.Champ != "")
                {
                    CFiltreDonneePrecalculee filtreBase    = m_listeFiltresDeBase.FirstOrDefault(f => f.ChampAssocie == cle.Champ);
                    CFiltreDonneePrecalculee filtreUser    = m_listeFiltresUser.FirstOrDefault(f => f.ChampAssocie == cle.Champ);
                    CFiltreDynamique         filtreDynBase = filtreBase != null ? filtreBase.Filtre : null;
                    CFiltreDynamique         filtreDynUser = filtreUser != null ? filtreUser.Filtre : null;
                    CFiltreData filtre = null;
                    if (filtreDynUser != null && filtreDynUser.ComposantPrincipal != null)
                    {
                        result = filtreDynUser.GetFiltreData();
                        if (result)
                        {
                            filtre = result.Data as CFiltreData;
                        }
                    }
                    if (filtreDynBase != null && filtreDynBase.ComposantPrincipal != null)
                    {
                        result = filtreDynBase.GetFiltreData();
                        if (result)
                        {
                            filtre = CFiltreData.GetAndFiltre(filtre, result.Data as CFiltreData);
                        }
                    }
                    if (filtre != null && filtre.HasFiltre)
                    {
                        //Crée une liste d'objets correspondant au filtre
                        CListeObjetsDonnees lst = new CListeObjetsDonnees(contexteDonnee, cle.TypeLie);
                        lst.Filtre = filtre;
                        StringBuilder bl = new StringBuilder();
                        foreach (CObjetDonneeAIdNumerique obj in lst)
                        {
                            bl.Append(obj.Id);
                            bl.Append(',');
                        }
                        filtre = null;
                        if (bl.Length == 0)
                        {
                            filtre        = new CFiltreDataImpossible();
                            filtreDonnees = new CFiltreDataImpossible();
                        }
                        else
                        {
                            bl.Remove(bl.Length - 1, 1);
                            filtre        = new CFiltreData(CDonneeCumulee.GetNomChampCle(nCle) + " in (" + bl.ToString() + ")");
                            filtreDonnees = CFiltreData.GetAndFiltre(filtreDonnees, filtre);
                        }
                    }
                }
                nCle++;
            }
            #endregion
            if (filtreDonnees != null)
            {
                lstDatas.Filtre = filtreDonnees;
            }


            //Crée le datatable de base
            DataTable table = new DataTable();

            Dictionary <string, string> dicChampsACopier = new Dictionary <string, string>();
            nCle = 0;
            foreach (CCleDonneeCumulee cle in parametre.ChampsCle)
            {
                if (cle.Champ != "")
                {
                    DataColumn col = new DataColumn(cle.Champ, typeof(string));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampCle(nCle)] = col.ColumnName;
                }
                nCle++;
            }
            foreach (CParametreDonneeCumulee.CNomChampCumule nom in parametre.NomChampsDecimaux)
            {
                if (nom.NomChamp != "")
                {
                    DataColumn col = new DataColumn(nom.NomChamp, typeof(double));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampValeur(nom.NumeroChamp)] = nom.NomChamp;
                }
            }
            foreach (CParametreDonneeCumulee.CNomChampCumule nom in parametre.NomChampsDates)
            {
                if (nom.NomChamp != "")
                {
                    DataColumn col = new DataColumn(nom.NomChamp, typeof(DateTime));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampDate(nom.NumeroChamp)] = nom.NomChamp;
                }
            }
            foreach (CParametreDonneeCumulee.CNomChampCumule nom in parametre.NomChampsTextes)
            {
                if (nom.NomChamp != "")
                {
                    DataColumn col = new DataColumn(nom.NomChamp, typeof(string));
                    table.Columns.Add(col);
                    dicChampsACopier[CDonneeCumulee.GetNomChampTexte(nom.NumeroChamp)] = nom.NomChamp;
                }
            }

            foreach (CDonneeCumulee donnee in lstDatas)
            {
                DataRow rowSource = donnee.Row.Row;
                DataRow rowDest   = table.NewRow();
                foreach (KeyValuePair <string, string> kv in dicChampsACopier)
                {
                    rowDest[kv.Value] = rowSource[kv.Key];
                }
                table.Rows.Add(rowDest);
            }
            result = m_tableauCroise.CreateTableCroisee(table);

            if (OperationCumul != OperationsAgregation.None)
            {
                DataTable tableFinale = result.Data as DataTable;
                DataRow   row         = tableFinale.NewRow();
                bool      bHeaderFait = false;
                foreach (DataColumn col in tableFinale.Columns)
                {
                    CChampFinalDeTableauCroiseDonnee champDonnee = col.ExtendedProperties[CTableauCroise.c_ExtendedPropertyToColumnKey] as CChampFinalDeTableauCroiseDonnee;
                    if (champDonnee != null)
                    {
                        CDonneeAgregation donnee = CDonneeAgregation.GetNewDonneeForOperation(OperationCumul);
                        donnee.PrepareCalcul();
                        foreach (DataRow rowTmp in tableFinale.Rows)
                        {
                            donnee.IntegreDonnee(rowTmp[col]);
                        }
                        row[col] = donnee.GetValeurFinale();
                    }
                    else if (!bHeaderFait)
                    {
                        row[col]    = m_strLibelleTotal;
                        bHeaderFait = true;
                    }
                }
                tableFinale.Rows.Add(row);
            }
            return(result);
        }