Esempio n. 1
0
        //-------------------------------------------------------------------------
        private void LoadEtapesDepuisBase()
        {
            if (m_lastDateLookInDb == null ||
                ((TimeSpan)(DateTime.Now - m_lastDateLookInDb.Value)).TotalMilliseconds > c_nDelailLookInDb)
            {
                m_lastDateLookInDb = DateTime.Now;

                AssureSession();
                if (m_session != null)
                {
                    using (CContexteDonnee ctx = new CContexteDonnee(m_session.IdSession, true, false))
                    {
                        CFiltreData filtre = new CFiltreData(
                            CEtapeWorkflow.c_champEtat + "=@1",
                            (int)EEtatEtapeWorkflow.ADemarrer);
                        CListeObjetsDonnees lst = new CListeObjetsDonnees(ctx, typeof(CEtapeWorkflow));
                        lst.Filtre = filtre;
                        lst.AssureLectureFaite();
                        List <CParametresStartEtapeInPile> lstToStart = new List <CParametresStartEtapeInPile>();
                        foreach (CEtapeWorkflow etape in lst)
                        {
                            //TESTDBKEYTODO
                            CParametresStartEtapeInPile parametre = new CParametresStartEtapeInPile(
                                m_session.IdSession,
                                etape.Id,
                                etape.KeyDémarreur,
                                etape.DateDebut != null ? etape.DateDebut.Value : DateTime.Now);
                            lstToStart.Add(parametre);
                        }
                        AddEtapesADemarrer(lstToStart.ToArray());
                    }
                }
            }
        }
Esempio n. 2
0
        //----------------------------------------------------
        private CResultAErreur AssureSessionEtContexte()
        {
            CResultAErreur resErreur = CResultAErreur.True;

            System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
            if (m_sessionClient == null || !m_sessionClient.IsConnected)
            {
                m_sessionClient = CSessionClient.CreateInstance();
                resErreur       = m_sessionClient.OpenSession(new CAuthentificationSessionServer(),
                                                              I.T("Alarm management|20154"),
                                                              ETypeApplicationCliente.Service);
                if (!resErreur)
                {
                    resErreur.EmpileErreur(resErreur.Erreur);
                    C2iEventLog.WriteErreur(I.T("Error while open alarm management session|20155"));
                    resErreur.EmpileErreur(I.T("Error while open alarm management session|20155"));
                    return(resErreur);
                }
            }

            if (m_contexteDonnee == null)
            {
                m_contexteDonnee = new CContexteDonnee(m_sessionClient.IdSession, true, true);
                CListeObjetsDonnees lst = new CListeObjetsDonnees(m_contexteDonnee, typeof(CTypeAlarme));
                lst.AssureLectureFaite();
                lst.ReadDependances("RelationsChampsCustomListe");
                lst = new CListeObjetsDonnees(m_contexteDonnee, typeof(CSeveriteAlarme));
                lst.AssureLectureFaite();
            }

            return(resErreur);
        }
Esempio n. 3
0
        //------------------------------------------------------------------
        public static void PreloadBesoinsSatisfaits(CListeObjetsDonnees lstSatisfactions)
        {
            if (m_cacheRelations == null)
            {
                return;
            }
            if (lstSatisfactions == null || lstSatisfactions.Count == 0)
            {
                return;
            }
            Type tp = lstSatisfactions.TypeObjets;

            if (!typeof(ISatisfactionBesoin).IsAssignableFrom(tp))
            {
                return;
            }
            string        strType = tp.ToString();
            StringBuilder bl      = new StringBuilder();

            foreach (CObjetDonneeAIdNumerique sat in lstSatisfactions)
            {
                if (sat.IsValide() && !m_cacheRelations.IsLoaded((ISatisfactionBesoin)sat))
                {
                    bl.Append(sat.Id);
                    bl.Append(',');
                }
            }
            if (bl.Length == 0)
            {
                return;
            }
            bl.Remove(bl.Length - 1, 1);
            CListeObjetsDonnees lst = new CListeObjetsDonnees(
                lstSatisfactions.ContexteDonnee,
                typeof(CRelationBesoin_Satisfaction),
                new CFiltreData(CRelationBesoin_Satisfaction.c_champTypeElement + "=@1 and " +
                                CRelationBesoin_Satisfaction.c_champIdElement + " in (" + bl.ToString() + ")", strType));

            lst.AssureLectureFaite();
            lst.InterditLectureInDB = true;
            foreach (ISatisfactionBesoin satisfaction in lstSatisfactions)
            {
                lst.Filtre = new CFiltreData(CRelationBesoin_Satisfaction.c_champTypeElement + "=@1 and " +
                                             CRelationBesoin_Satisfaction.c_champIdElement + "=@2",
                                             strType,
                                             satisfaction.Id);
                m_cacheRelations.SetRelations(satisfaction, lst);
            }
        }
Esempio n. 4
0
        /// //////////////////////////////
        ///
        public CResultAErreur Init(
            CListeObjetsDonnees liste,
            string strProprieteAffiche,
            string strChampFiltre,
            Type typeFormEditionStandard
            )
        {
            m_filtrePrincipal = liste.Filtre;
            m_listeObjets     = liste;
            m_listeObjets.AssureLectureFaite();
            m_listeObjets.InterditLectureInDB = true;
            m_strProprieteAffichee            = strProprieteAffiche;
            m_strChampFiltre  = strChampFiltre;
            m_typeFormEdition = typeFormEditionStandard;

            return(m_combo.Init(liste, strProprieteAffiche, typeFormEditionStandard, true));
        }
Esempio n. 5
0
        //----------------------------------------------------------------------------------
        public CResultAErreur CreateChampInTable(IChampDeTable champExport, DataTable table)
        {
            CResultAErreur result = CResultAErreur.True;

            if (champExport is C2iChampExport && ((C2iChampExport)champExport).Origine is C2iOrigineChampExportChampCustom)
            {
                C2iOrigineChampExportChampCustom origineCustom = (C2iOrigineChampExportChampCustom)((C2iChampExport)champExport).Origine;
                //Récupère les noms et les types des champs custom
                CContexteDonnee ctx = null;
                if (table.DataSet is CContexteDonnee)
                {
                    ctx = (CContexteDonnee)table.DataSet;
                }
                else
                {
                    ctx = new CContexteDonnee(0, true, false);
                }
                //Lit les champs custom
                CListeObjetsDonnees listeChamps = new CListeObjetsDonnees(ctx, typeof(CChampCustom));
                listeChamps.AssureLectureFaite();

                foreach (int nIdChamp in origineCustom.IdsChampCustom)
                {
                    CChampCustom champ = new CChampCustom(ctx);
                    if (champ.ReadIfExists(nIdChamp))
                    {
                        if (champ.TypeDonneeChamp.TypeDonnee != TypeDonnee.tObjetDonneeAIdNumeriqueAuto)
                        {
                            DataColumn colChamp = new DataColumn(c_strPrefixeChampCustom + champ.Nom, champ.TypeDonnee.TypeDotNetNatif);
                            colChamp.AllowDBNull = true;
                            table.Columns.Add(colChamp);
                        }
                    }
                }
                return(result);
            }

            if (table.Columns.Contains(champExport.NomChamp))
            {
                return(result);
            }
            DataColumn col = new DataColumn(champExport.NomChamp, champExport.TypeDonnee);

            table.Columns.Add(col);
            return(result);
        }
Esempio n. 6
0
        //-------------------------------------------------------------------
        private static void AlloueCode(CObjetHierarchique objet, ref int nLastCodeAlloue)
        {
            CFiltreData filtre = null;

            if (objet.ObjetParent != null)
            {
                filtre = new CFiltreData(objet.ChampIdParent + "=@1",
                                         objet.ObjetParent.Id);
            }
            else
            {
                filtre = new CFiltreData(objet.ChampIdParent + " is null and " +
                                         objet.ChampCodeSystemePartiel + ">@1", GetCle(nLastCodeAlloue, objet.NbCarsParNiveau));
            }

            CListeObjetsDonnees listeSoeurs = new CListeObjetsDonnees(objet.ContexteDonnee, objet.GetType(), filtre);

            listeSoeurs.AssureLectureFaite();

            listeSoeurs.InterditLectureInDB = true;

            Hashtable tableCodesUtilises = new Hashtable();

            foreach (CObjetHierarchique obj in listeSoeurs)
            {
                tableCodesUtilises[obj.CodeSystemePartiel] = true;
            }

            //Cherche le prochain numéro libre
            int    nCpt   = nLastCodeAlloue;
            string strCle = "";

            do
            {
                nCpt++;
                strCle = GetCle(nCpt, objet.NbCarsParNiveau);

                /*listeSoeurs.Filtre = new CFiltreData(objet.ChampCodeSystemePartiel + "=@1",
                 *      strCle);*/
            }while (tableCodesUtilises.ContainsKey(strCle));
            nLastCodeAlloue = nCpt;
            objet.ChangeCodePartiel(strCle);
        }
Esempio n. 7
0
    //-------------------------------------------------------------
    private static CResultAErreur IntegreReleve(TID.releve.CReleveSite releve,
                                                CContexteDonnee ctx)
    {
        CResultAErreur result      = CResultAErreur.True;
        CReleveSite    releveTimos = new CReleveSite(ctx);

        releveTimos.CreateNewInCurrentContexte();
        CSite site = GetObjetTimos <CSite>(releve.Row[TID.CSite.c_champId], ctx);

        if (site == null)
        {
            result.EmpileErreur("Site doesn't exists");
            return(result);
        }
        try
        {
            //Précharge les données
            CListeObjetsDonnees lst = new CListeObjetsDonnees(ctx, typeof(CTypeEquipement));
            lst.AssureLectureFaite();
            lst = new CListeObjetsDonnees(ctx, typeof(CRelationTypeEquipement_Constructeurs));
            lst.AssureLectureFaite();
            lst = site.Equipements;
            releveTimos.Site       = site;
            releveTimos.DateReleve = releve.DateReleve;
            CListeEntitesDeMemoryDb <TID.releve.CReleveEquipement> lstEqpts = releve.RelevesEquipement;
            lstEqpts.Filtre = new CFiltreMemoryDb(TID.releve.CReleveEquipement.c_champIdContenant + " is null");
            foreach (TID.releve.CReleveEquipement relEq in lstEqpts)
            {
                result = IntegreReleveEquipement(relEq, null, releveTimos);
                if (!result)
                {
                    return(result);
                }
            }
        }
        catch (Exception e)
        {
            result.EmpileErreur(new CErreurException(e));
        }
        return(result);
    }
Esempio n. 8
0
        //Initialise la base des alarmes en cours avec les alarmes de la base et les acces concernant chaque élément
        private void LoadAlarmesEtLiensTransForElement(string strChampDansAcces, CDictionnaireConcerne dicConcernes)
        {
            //Récupère la relation entre CSpvLienAccesAlarme et CSpvLienAccesAlarmeRep
            if (m_relationFromLienAlarmeToLienAlarmeRep == null)
            {
                foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(CSpvLienAccesAlarme.c_nomTable))
                {
                    if (relation.TableFille == CSpvLienAccesAlarme_Rep.c_nomTable && relation.TableParente == CSpvLienAccesAlarme.c_nomTable)
                    {
                        m_relationFromLienAlarmeToLienAlarmeRep = relation;
                        break;
                    }
                }
            }
            List <int> lstIdsElements = new List <int>();

            lstIdsElements.AddRange(dicConcernes.Keys);
            int nSizePaquet = 100;

            for (int nPaquet = 0; nPaquet < lstIdsElements.Count; nPaquet += nSizePaquet)
            {
                int           nMax = Math.Min(nPaquet + nSizePaquet, lstIdsElements.Count);
                StringBuilder bl   = new StringBuilder();
                for (int nId = 0; nId < nMax; nId++)
                {
                    bl.Append(lstIdsElements[nId]);
                    bl.Append(';');
                }
                if (bl.Length > 0)
                {
                    bl.Remove(bl.Length - 1, 1);
                    //Charge tous les Liens d'alarme pour les éléments
                    CListeObjetsDonnees lstLiensAccesAlarme = new CListeObjetsDonnees(m_contexteDonnee, typeof(CSpvLienAccesAlarme));
                    lstLiensAccesAlarme.Filtre = new CFiltreDataAvance(CSpvLienAccesAlarme.c_nomTable,
                                                                       CSpvAccesAlarme.c_nomTable + "." + strChampDansAcces + " in (" +
                                                                       bl.ToString() + ")");
                    lstLiensAccesAlarme.AssureLectureFaite();

                    // Chargement des acces correspondant
                    CListeObjetsDonnees lstAcces = lstLiensAccesAlarme.GetDependances("AccesAlarmeOne");
                    lstAcces.InterditLectureInDB = true;

                    CListeObjetsDonnees lstEtatAlarme = lstLiensAccesAlarme.GetDependances(m_relationFromLienAlarmeToLienAlarmeRep);
                    lstEtatAlarme.Filtre = new CFiltreData(CSpvLienAccesAlarme_Rep.c_champALARM_ID + " is not null");
                    lstEtatAlarme.AssureLectureFaite();
                    lstEtatAlarme.InterditLectureInDB = true;

                    // Chargement des données alarmes
                    CListeObjetsDonnees listAlarmesDonnees = lstEtatAlarme.GetDependances("AlarmeDonnee");
                    listAlarmesDonnees.AssureLectureFaite();
                    listAlarmesDonnees.InterditLectureInDB = true;

                    lstLiensAccesAlarme.InterditLectureInDB = true;
                    lstEtatAlarme.InterditLectureInDB       = true;

                    foreach (CSpvAlarmeDonnee donneeAlarme in listAlarmesDonnees)
                    {
                        if (donneeAlarme != null)
                        {
                            CInfoAlarmeAffichee info = new CInfoAlarmeAffichee(donneeAlarme);
                            //m_dicAlarmes[info.IdSpvEvtAlarme] = info;
                            m_dicAlarmes[info.IdSpvAlarmeData] = info;
                            StartAlarme(info);
                        }
                    }

                    foreach (CSpvLienAccesAlarme lienAlarme in lstLiensAccesAlarme)
                    {
                        CSpvAcces acces = lienAlarme.AccesAlarmeOne;
                        if (acces != null)
                        {
                            int?nId = acces.Row[strChampDansAcces] as int?;
                            if (nId != null)
                            {
                                List <CInfoElementDeSchemaSupervise> lst = null;
                                if (dicConcernes.TryGetValue(nId.Value, out lst))
                                {
                                    foreach (CInfoElementDeSchemaSupervise info in lst)
                                    {
                                        info.SetConcerneParAlarmes();
                                        if (lienAlarme.MaskAdminDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now)
                                        {
                                            if (lienAlarme.MaskAdminDateMax == null || lienAlarme.MaskAdminDateMax < DateTime.Now)
                                            {
                                                info.SetMasquageAdministrateur(lienAlarme.Id, true);
                                            }
                                        }
                                        if (lienAlarme.MaskBriDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now)
                                        {
                                            if (lienAlarme.MaskBriDateMax == null || lienAlarme.MaskBriDateMax < DateTime.Now)
                                            {
                                                info.SetMasquageBrigadier(lienAlarme.Id, true);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    if (m_infoSchemaRacine != null)
                    {
                        List <CInfoElementDeSchemaSupervise> lstTmp = new List <CInfoElementDeSchemaSupervise>();
                        m_infoSchemaRacine.RecalculeToutLeMasquage(lstTmp);
                    }
                }
            }
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////
        private void ReadDependanceParente(
            string strPropriete,
            CListeObjetsDonnees lstSource,
            CListeObjetsDonnees.CArbreProps arbre,
            CInfoRelation relation)
        {
            int          nNbTotal = lstSource.Count;
            string       strKey   = relation.RelationKey;
            Type         tp       = null;
            PropertyInfo info     = lstSource.TypeObjets.GetProperty(strPropriete);

            if (info == null)
            {
                return;
            }
            tp = info.PropertyType;
            if (tp != null && typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tp))
            {
                //Crée les paquets
                ArrayList lstPaquets            = new ArrayList();
                Hashtable tableIdsParentTraites = new Hashtable();
                int       nPaquet          = 0;
                string    strChampFille    = relation.ChampsFille[0];
                string    strPaquetEnCours = "";
                int       nNbInPaquet      = 0;
                for (int n = 0; n < lstSource.View.Count; n++)
                {
                    DataRow row    = lstSource.View.GetRow(n);
                    string  strCle = row[strChampFille].ToString();
                    if (strCle != "")
                    {
                        if (tableIdsParentTraites[strCle] == null)
                        {
                            tableIdsParentTraites[strCle] = true;
                            strPaquetEnCours += strCle + ",";
                            nNbInPaquet++;
                            if (nNbInPaquet >= CListeObjetsDonnees.c_nNbLectureParLotFils)
                            {
                                strPaquetEnCours = "(" + strPaquetEnCours.Substring(0, strPaquetEnCours.Length - 1) + ")";
                                lstPaquets.Add(strPaquetEnCours);
                                strPaquetEnCours = "";
                                nNbInPaquet      = 0;
                            }
                        }
                    }
                }
                if (strPaquetEnCours.Length > 0)
                {
                    strPaquetEnCours = "(" + strPaquetEnCours.Substring(0, strPaquetEnCours.Length - 1) + ")";
                    lstPaquets.Add(strPaquetEnCours);
                }

                //Lit les relations par paquet
                int nNbPaquets = lstPaquets.Count;
                for (nPaquet = 0; nPaquet < nNbPaquets; nPaquet++)
                {
                    string strPaquet = (string)lstPaquets[nPaquet];
                    if (strPaquet != "()")
                    {
                        CListeObjetsDonnees listeParent = new CListeObjetsDonnees(lstSource.ContexteDonnee, tp);
                        listeParent.ModeSansTri     = true;
                        listeParent.PreserveChanges = true;
                        listeParent.Filtre          = new CFiltreData(relation.ChampsParent[0] + " in " + strPaquet);
                        listeParent.AssureLectureFaite();
                        //Indique que les lignes ont été lues
                        //Stef 2/12/2011 : non, on n'indique pas que c'est lu puisqu'il
                        //s'agit de dépendances parentes !
                        //Ca pose le problème suivant : si on est sur une table hiérarchique,
                        //lorsqu'on lit le parent (d'un projet par exemple), le fait de
                        //dire que les dépendances sont lues implique qu'on indique
                        //qu'on a lu les fils.
                        //De ma compréhension à ce jour, on ne gère pas de colonne
                        //indiquant si la dépendance a été chargé pour des dépendances
                        //parentes

                        /*if ( lstSource.View.Table.Columns[strKey] != null )
                         * {
                         *      for ( int nRow = 0; nRow < lstSource.View.Count; nRow++ )
                         *      {
                         *              CContexteDonnee.ChangeRowSansDetectionModification ( lstSource.View.GetRow ( nRow ), strKey, true );
                         *      }
                         * }*/
                        listeParent.ReadDependances(arbre);
                    }
                }
            }
        }
        /////////////////////////////////////////////////////////////////////////////////////////////////
        /// <summary>
        /// Lit les dépendances filles du type de donné
        /// </summary>
        /// <returns></returns>
        private void ReadDependanceFille(
            string strPropriete,
            CListeObjetsDonnees lstSource,
            CListeObjetsDonnees.CArbreProps arbre,
            CInfoRelation relation,
            List <string> listePaquets)
        {
            CResultAErreur result  = CResultAErreur.True;
            Type           tpFille = null;
            PropertyInfo   info    = lstSource.TypeObjets.GetProperty(strPropriete);

            if (info == null)
            {
                return;
            }

            object[] attrs = info.GetCustomAttributes(typeof(RelationFilleAttribute), true);
            if (attrs == null || attrs.Length < 0)
            {
                return;
            }
            tpFille = ((RelationFilleAttribute)attrs[0]).TypeFille;

            DataTable table = lstSource.ContexteDonnee.GetTableSafe(lstSource.NomTable);

            //S'assure que la table fille est chargée
            lstSource.ContexteDonnee.GetTableSafe(relation.TableFille);
            string     strKey        = relation.RelationKey;
            DataColumn colDependance = table.Columns[strKey];


            if (listePaquets == null)
            {
                listePaquets = lstSource.GetPaquetsPourLectureFils(relation.ChampsParent[0], colDependance);
            }
            int nNbPaquets = listePaquets.Count;

            //Lit les relations par paquet
            for (int nPaquet = 0; nPaquet < nNbPaquets; nPaquet++)
            {
                string strPaquet = (string)listePaquets[nPaquet];
                if (strPaquet.Length > 0)
                {
                    CListeObjetsDonnees listeFille = new CListeObjetsDonnees(lstSource.ContexteDonnee, tpFille);
                    listeFille.Filtre = new CFiltreData(relation.ChampsFille[0] + " in " + strPaquet);
                    if (arbre.Filtre.Length > 0)
                    {
                        listeFille.Filtre.Filtre += " and " + arbre.Filtre;
                    }
                    listeFille.ModeSansTri     = true;
                    listeFille.PreserveChanges = true;
                    listeFille.AssureLectureFaite();
                    int nMax = Math.Min(lstSource.Count, (nPaquet + 1) * CListeObjetsDonnees.c_nNbLectureParLotFils);


                    if (colDependance != null && arbre.Filtre.Length == 0)
                    {
                        //Indique que les lignes ont été lues
                        for (int nRow = nPaquet * CListeObjetsDonnees.c_nNbLectureParLotFils; nRow < nMax; nRow++)
                        {
                            DataRow      row      = lstSource.View.GetRow(nRow);
                            DataRowState oldState = row.RowState;
                            row[colDependance] = true;
                            if (oldState == DataRowState.Unchanged)
                            {
                                row.AcceptChanges();
                            }
                        }
                    }
                    listeFille.ReadDependances(arbre);
                }
            }
        }
Esempio n. 11
0
        /// <summary>
        /// /////////////////////////////////////////////////////////////////////////////////
        /// </summary>
        /// <param name="table"></param>
        /// <param name="result"></param>
        ///
        private static CResultAErreur TraitementAvantSauvegardeExterne(CContexteDonnee contexte, Hashtable tableData)
        {
            CResultAErreur result = CResultAErreur.True;

            ///Stef 22/07/08 : l'appel à shouldDeclenche peut
            ///nécessiter GetValeurChamp (si conditions sur des champs). Or, si un élément n'a pas
            ///de valeur pour un champ, l'appli va aller chercher la valeur par défaut de ce
            ///champ, si le champ n'est pas chargé, l'appli va le lire. Comme on est souvent
            ///dans un contexte sans gestion par tables complètes, on est mal, parce que
            ///ça va génerer une requête par champ.
            ///Donc, on lit tous les champs custom avant de commencer
            CListeObjetsDonnees listeChamps = new CListeObjetsDonnees(contexte, typeof(CChampCustom));

            listeChamps.PreserveChanges = true;            //Pour ne pas modifier les champs modifiés
            listeChamps.AssureLectureFaite();

            DateTime dt = DateTime.Now;
            CTraitementApresSauvegarde traitement = new CTraitementApresSauvegarde( );

            ArrayList lstTables = CContexteDonnee.GetTablesOrderInsert(contexte);

            //Pour empêcher de regarder deux fois les évenements d'un même objet
            //Type->Dictionnaire des ids vus
            Dictionary <Type, Dictionary <int, bool> > elementsVus = new Dictionary <Type, Dictionary <int, bool> >();

            DataRowChangeEventHandler handlerRedo = new DataRowChangeEventHandler(table_RowChanged);

            Dictionary <string, Dictionary <int, bool> > listeElementsARepasser = null;

            if (!m_listeElementsARepasser.TryGetValue(contexte, out listeElementsARepasser))
            {
                listeElementsARepasser             = new Dictionary <string, Dictionary <int, bool> >();
                m_listeElementsARepasser[contexte] = listeElementsARepasser;
            }

            bool bFirstPasse     = true;
            int  nLimiteurPasses = 0;

            while ((bFirstPasse | listeElementsARepasser.Count > 0) && nLimiteurPasses < 5)
            {
                nLimiteurPasses++;

                foreach (DataTable table in lstTables)
                {
                    if (table.Rows.Count > 0 && table.PrimaryKey.Length == 1)
                    {
                        string strChampCle = table.PrimaryKey[0].ColumnName;

                        Type tpObjets = CContexteDonnee.GetTypeForTable(table.TableName);
                        if (!typeof(CObjetDonneeAIdNumerique).IsAssignableFrom(tpObjets))
                        {
                            continue;
                        }

                        Type typeOriginal = tpObjets;

                        //Lors de la modif de champs custom, l'élement parent n'est pas forcement modifié
                        //Mais le champ peut l'être
                        if (tpObjets.IsSubclassOf(typeof(CRelationElementAChamp_ChampCustom)))
                        {
                            int  nLigne = 0;
                            bool bGoOut = false;
                            while (table.Rows.Count > nLigne && !bGoOut)
                            {
                                if (table.Rows[nLigne].RowState != DataRowState.Deleted)
                                {
                                    CRelationElementAChamp_ChampCustom rel = (CRelationElementAChamp_ChampCustom)contexte.GetNewObjetForRow(table.Rows[nLigne]);
                                    tpObjets    = rel.ElementAChamps.GetType();
                                    strChampCle = ((CObjetDonnee)rel.ElementAChamps).GetChampsId()[0];
                                    bGoOut      = true;
                                }
                                nLigne++;
                            }
                        }

                        //Les objets qui n'ont pas de relationTypeId ne peuvent pas avoir d'évenements
                        if (tpObjets.GetCustomAttributes(typeof(NoRelationTypeIdAttribute), true).Length > 0)
                        {
                            continue;
                        }

                        ArrayList lstEvenements = GetListeEvenementsAutoSur(tpObjets, contexte.IdVersionDeTravail);

                        //Id des éléments modifiés
                        List <int> listeIdsElementsAVerifierHandlers = new List <int>();
                        string     strPrimaryKey = "";
                        if (table.PrimaryKey.Length == 1 &&
                            table.PrimaryKey[0].DataType == typeof(int))
                        {
                            strPrimaryKey = table.PrimaryKey[0].ColumnName;
                        }

                        Dictionary <int, bool> tableIdsVues = null;
                        if (!elementsVus.TryGetValue(tpObjets, out tableIdsVues))
                        {
                            tableIdsVues          = new Dictionary <int, bool>();
                            elementsVus[tpObjets] = tableIdsVues;
                        }

                        Dictionary <int, bool> listeARepasserPourTable = null;
                        if (!listeElementsARepasser.TryGetValue(table.TableName, out listeARepasserPourTable))
                        {
                            listeARepasserPourTable = null;
                        }

                        List <CObjetDonnee> lstObjetsAvecEvenementsSpecifiques = new List <CObjetDonnee>();

                        //Stef 16/11/2012 :
                        //Si c'est un élément à champs, il est consideré comme modifié
                        //si un de ses champs custom est modifiés
                        //Ca a été fait parce que les handlers d'évenement n'étaient
                        //Pas pris en compte sur modif de champ custom
                        //On n'enlève pas pour autant l'ancienne méthode qui consiste
                        //à considérer l'élément modifié losrqu'on passe sur la table des
                        //valeurs de champs custom
                        if (typeof(IObjetDonneeAChamps).IsAssignableFrom(typeOriginal) && table.Rows.Count > 0)
                        {
                            //Regarde s'il y a des relations
                            IObjetDonneeAChamps objAChamp = contexte.GetNewObjetForRow(table.Rows[0]) as IObjetDonneeAChamps;
                            string strTableChamps         = objAChamp.GetNomTableRelationToChamps();
                            //Trouve la relation à la table
                            DataTable tableChamps = contexte.Tables[strTableChamps];
                            if (tableChamps != null)//Si la table champs n'est pas là, c'est
                            //qu'elle n'a pas été modifiée !! c'est logique çà
                            {
                                DataRelation rel = null;
                                foreach (DataRelation relTest in tableChamps.ParentRelations)
                                {
                                    if (relTest.ParentTable.TableName == table.TableName)
                                    {
                                        rel = relTest;
                                        break;
                                    }
                                }
                                if (rel != null)//On peut vérifier !
                                {
                                    foreach (DataRow row in new ArrayList(table.Rows))
                                    {
                                        if (row.RowState == DataRowState.Unchanged)//sinon, ce n'est pas la peine
                                        {
                                            DataRow[] rowsChamps = row.GetChildRows(rel);
                                            foreach (DataRow rowChamp in rowsChamps)
                                            {
                                                if (rowChamp.RowState != DataRowState.Unchanged)
                                                {
                                                    //Aloue l'objet pour s'assurer que la ligne est bien pleine
                                                    CObjetDonnee objTmp = contexte.GetNewObjetForRow(row);
                                                    objTmp.AssureData();
                                                    row.SetModified();
                                                    string strOldContexte = (string)row[CObjetDonnee.c_champContexteModification];
                                                    if (strOldContexte.Length == 0)
                                                    {
                                                        row[CObjetDonnee.c_champContexteModification] = rowChamp[CObjetDonnee.c_champContexteModification,
                                                                                                                 rowChamp.RowState == DataRowState.Deleted ? DataRowVersion.Original : DataRowVersion.Current] as string;
                                                    }
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }

                        foreach (DataRow row in new ArrayList(table.Rows))
                        {
                            CObjetDonneeAIdNumerique objet = null;
                            if (lstEvenements.Count > 0)
                            {
                                if (row.RowState == DataRowState.Added ||
                                    row.RowState == DataRowState.Modified ||
                                    row.RowState == DataRowState.Deleted)
                                {
                                    objet = (CObjetDonneeAIdNumerique)((CContexteDonnee)table.DataSet).GetNewObjetForRow(row);
                                    if (objet.Row.RowState == DataRowState.Deleted)
                                    {
                                        objet.VersionToReturn = DataRowVersion.Original;
                                    }
                                    if (objet.Row.RowState != DataRowState.Deleted && EvenementAttribute.HasEventsSpecifiques(objet))
                                    {
                                        lstObjetsAvecEvenementsSpecifiques.Add(objet);
                                    }

                                    if (typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(typeOriginal))
                                    {
                                        CRelationElementAChamp_ChampCustom rel = objet as CRelationElementAChamp_ChampCustom;
                                        objet = (CObjetDonneeAIdNumerique)((CRelationElementAChamp_ChampCustom)objet).ElementAChamps;
                                        if (objet.Row.RowState == DataRowState.Unchanged)
                                        {
                                            objet.Row.Row.SetModified();
                                        }
                                        if (objet.Row.RowState == DataRowState.Deleted)
                                        {
                                            objet.VersionToReturn = DataRowVersion.Original;
                                        }
                                        if (rel.ContexteDeModification.Length != 0 &&
                                            objet.ContexteDeModification.Length == 0)
                                        {
                                            objet.ContexteDeModification = rel.ContexteDeModification;
                                        }
                                    }
                                    if (!tableIdsVues.ContainsKey(objet.Id) || (
                                            listeARepasserPourTable != null && listeARepasserPourTable.ContainsKey(objet.Id)))
                                    {
                                        tableIdsVues[objet.Id] = true;
                                        foreach (CEvenement evt in lstEvenements)
                                        {
                                            if (!traitement.ContainsCouple(evt, (CObjetDonneeAIdNumerique)objet))
                                            {
                                                //Attention, si c'est une valeur de champ custom, envoie la valeur,
                                                //c'est elle qui sera testée.
                                                CInfoDeclencheurProcess infoDeclencheur = null;
                                                if (evt.ShouldDeclenche((CObjetDonneeAIdNumerique)objet, ref infoDeclencheur))
                                                {
                                                    infoDeclencheur.DbKeyEvenementDeclencheur = evt.DbKey;
                                                    infoDeclencheur.Info = evt.Libelle;
                                                    traitement.AddCoupleEvenementObjet(evt, (CObjetDonneeAIdNumerique)objet, infoDeclencheur);
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            //Regarde les handle d'évenement sur l'objet
                            if (strPrimaryKey != "" && (row.RowState == DataRowState.Modified))
                            {
                                listeIdsElementsAVerifierHandlers.Add((int)row[strPrimaryKey]);
                            }
                        }
                        if (listeARepasserPourTable != null)
                        {
                            listeARepasserPourTable.Clear();
                        }

                        if (listeIdsElementsAVerifierHandlers.Count > 0 && bFirstPasse)
                        {
                            //traitement par paquet de 500
                            for (int nIndexLot = 0; nIndexLot < listeIdsElementsAVerifierHandlers.Count; nIndexLot += 500)
                            {
                                int           nMin = Math.Min(nIndexLot + 500, listeIdsElementsAVerifierHandlers.Count);
                                StringBuilder bl   = new StringBuilder();
                                for (int nIndex = nIndexLot; nIndex < nMin; nIndex++)
                                {
                                    bl.Append(listeIdsElementsAVerifierHandlers[nIndex].ToString());
                                    bl.Append(",");
                                }
                                string strIdsElementsAVerifierHandlers = bl.ToString().Substring(0, bl.ToString().Length - 1);
                                //Recherche tous les handlers d'évenement pour les objets concernés
                                CListeObjetsDonnees listeHandler = new CListeObjetsDonnees(contexte, typeof(CHandlerEvenement));
                                listeHandler.Filtre = new CFiltreData(
                                    CHandlerEvenement.c_champIdCible + " in (" + strIdsElementsAVerifierHandlers + ") and " +
                                    CHandlerEvenement.c_champTypeCible + "=@1 and " +
                                    CHandlerEvenement.c_champTypeEvenement + "=@2",
                                    tpObjets.ToString(),
                                    (int)TypeEvenement.Modification);
                                listeHandler.PreserveChanges = true;
                                foreach (CHandlerEvenement handler in listeHandler)
                                {
                                    if (handler.Row.RowState != DataRowState.Deleted)
                                    {
                                        CObjetDonneeAIdNumerique objetTmp = (CObjetDonneeAIdNumerique)Activator.CreateInstance(tpObjets, new object[] { contexte });
                                        if (objetTmp.ReadIfExists(handler.IdElementCible))
                                        {
                                            CInfoDeclencheurProcess infoDeclencheur = null;
                                            if (handler.ShoulDeclenche(objetTmp, ref infoDeclencheur))
                                            {
                                                if (infoDeclencheur != null && handler.EvenementLie != null)
                                                {
                                                    infoDeclencheur.Info = handler.EvenementLie.Libelle;
                                                }
                                                traitement.AddCoupleHandlerObjet(handler, (CObjetDonneeAIdNumerique)objetTmp, infoDeclencheur);
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        //Annule les évenements spécifiques, ils ont été traités !
                        foreach (CObjetDonnee objet in lstObjetsAvecEvenementsSpecifiques)
                        {
                            EvenementAttribute.ClearEvenements(objet);
                        }
                    }
                }

                //Execute ce qui peut être executé tout de suite
                foreach (DataTable table in contexte.Tables)
                {
                    table.RowChanged += handlerRedo;
                }
                listeElementsARepasser.Clear();
                foreach (CTraitementApresSauvegarde.CCoupleDeclencheurObjet couple in traitement.CouplesEvenementOuHandlerObjet)
                {
                    if (couple.Objet is CObjetDonneeAIdNumerique &&
                        couple.PeutEtreExecuteSurLePosteClient)
                    {
                        result = couple.OnDeclencheSurClient();
                        if (!result)
                        {
                            return(result);
                        }
                    }
                }
                foreach (DataTable table in contexte.Tables)
                {
                    table.RowChanged -= handlerRedo;
                }
                bFirstPasse = false;
            }

            if (traitement.CouplesEvenementOuHandlerObjet.Count != 0)
            {
                tableData[c_cleDonneeListeTraitements] = traitement;
            }
            m_listeElementsARepasser.Remove(contexte);
            return(result);
        }
Esempio n. 12
0
        private static ArrayList GetListeEvenementsAutoSur(Type tp, int?nIdVersion)
        {
            ArrayList lst = null;

            if (nIdVersion == null)
            {
                lst = (ArrayList)m_tableTypeToEvenements[tp];
            }
            if (lst == null)
            {
                CContexteDonnee contextePourRechercheDeProcess = Contexte;
                if (nIdVersion != null)
                {
                    contextePourRechercheDeProcess = new CContexteDonnee(0, true, false);
                    contextePourRechercheDeProcess.SetVersionDeTravail(nIdVersion, false);
                }
                try
                {
                    CListeObjetsDonnees liste = new CListeObjetsDonnees(contextePourRechercheDeProcess, typeof(CEvenement));
                    if (m_bEvenementsChanged && nIdVersion == null)
                    {
                        liste.AssureLectureFaite();
                    }
                    if (nIdVersion == null)
                    {
                        m_bEvenementsChanged = false;
                    }

                    lst = new ArrayList();

                    liste.InterditLectureInDB = nIdVersion == null;
                    liste.Filtre = new CFiltreData(
                        CEvenement.c_champTypeCible + "=@1 and " +
                        CEvenement.c_champTypeEvenement + "<>@2" /* and " +
                                                                  * CEvenement.c_champTypeEvenement + "<>@3"*/,
                        tp.ToString(),
                        (int)TypeEvenement.Manuel /*,
                                                   * (int)TypeEvenement.Date*/);
                    foreach (CEvenement evt in liste)
                    {
                        lst.Add(evt);
                    }
                    lock (typeof(CLockerCacheEvenements))
                    {
                        if (nIdVersion == null)
                        {
                            m_tableTypeToEvenements[tp] = lst;
                        }
                    }
                }
                catch
                {
                }
                finally
                {
                    if (nIdVersion != null)
                    {
                        contextePourRechercheDeProcess.Dispose();
                    }
                }
            }
            return(lst);
        }
Esempio n. 13
0
        //------------------------------------
        public CResultAErreur Importer(string strFichier, CContexteDonnee contexteDestination)
        {
            CResultAErreur result = m_parametre.LectureFichier(strFichier);

            m_nNbUpdated = 0;
            m_nNbCreated = 0;

            if (!result)
            {
                return(result);
            }

            if (m_bChargerTouteLaCible)
            {
                CListeObjetsDonnees lst = new CListeObjetsDonnees(contexteDestination, m_typeCible);
                lst.AssureLectureFaite();
            }

            //Vérifie que l'utilisateur a le droit de faire un import
            CSessionClient session   = CSessionClient.GetSessionForIdSession(contexteDestination.IdSession);
            bool           bALeDroit = false;

            if (session != null)
            {
                IInfoUtilisateur info = session.GetInfoUtilisateur();
                if (info != null)
                {
                    bALeDroit = info.GetDonneeDroit(CDroitDeBaseSC2I.c_droitImport) != null;
                }
            }

            if (!bALeDroit)
            {
                result.EmpileErreur(I.T("Your are not allowed to import data|20048"));
                return(result);
            }

            DataTable table = result.Data as DataTable;

            if (table == null)
            {
                result.EmpileErreur(I.T("Import error, can not read source data|20043"));
                return(result);
            }
            int    nParametre = 1;
            string strFiltre  = "";

            foreach (CMappageChampImport mappage in Mappages)
            {
                if (mappage.IsCle)
                {
                    result = mappage.GetFiltreCle(m_typeCible, nParametre);
                    if (!result)
                    {
                        return(result);
                    }
                    nParametre++;
                    strFiltre += result.Data.ToString() + " and ";
                }
            }
            CFiltreData filtreCle = null;

            if (strFiltre.Length > 0)
            {
                filtreCle = new CFiltreData(strFiltre.Substring(0, strFiltre.Length - 5));
            }
            foreach (DataRow row in table.Rows)
            {
                result = ImporteRow(row, filtreCle, contexteDestination);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
Esempio n. 14
0
        /// ////////////////////////////////////////////////////////
        protected override CResultAErreur  MyExecute(CContexteExecutionAction contexte)
        {
            CResultAErreur result = CResultAErreur.True;

            List <Type> lstTypesAVerifier = new List <Type>();

            //Trouve tous les types héritant de CMappableTimos
            foreach (Assembly ass in sc2i.common.CGestionnaireAssemblies.GetAssemblies())
            {
                foreach (Type tp in ass.GetTypes())
                {
                    if (typeof(IObjetSPVAvecObjetTimos).IsAssignableFrom(tp))
                    {
                        lstTypesAVerifier.Add(tp);
                    }
                }
            }
            List <string> lstTablesDansOrdre = new List <string>();

            using (CContexteDonnee ctxTmp = new CContexteDonnee(contexte.IdSession, true, false))
            {
                foreach (Type tp in lstTypesAVerifier)
                {
                    string strTable = CContexteDonnee.GetNomTableForType(tp);
                    if (strTable != null)
                    {
                        ctxTmp.GetTableSafe(strTable);
                    }
                }
                foreach (DataTable table in ctxTmp.GetTablesOrderInsert())
                {
                    lstTablesDansOrdre.Add(table.TableName);
                }
            }
            foreach (string strNomTable in lstTablesDansOrdre)
            {
                Type   tp       = CContexteDonnee.GetTypeForTable(strNomTable);
                Type   tpParent = tp;
                Type[] generics = new Type[0];
                while (tpParent != null && generics.Length == 0)
                {
                    if (tpParent.IsGenericType && tpParent.GetGenericTypeDefinition() == typeof(CMappableAvecTimos <,>))
                    {
                        generics = tpParent.GetGenericArguments();
                    }
                    tpParent = tpParent.BaseType;
                }
                if (generics.Length == 0)
                {
                    continue;
                }

                IObjetSPVAvecObjetTimos obj = Activator.CreateInstance(tp, new object[] { contexte.ContexteDonnee }) as IObjetSPVAvecObjetTimos;
                Type typeTimos = obj.GetTypeObjetsTimos();
                //Lit tous les objets TIMOS
                CListeObjetsDonnees lstObjetsTimos = new CListeObjetsDonnees(contexte.ContexteDonnee, typeTimos);
                lstObjetsTimos.AssureLectureFaite();
                CListeObjetsDonnees lstObjetsSpv = new CListeObjetsDonnees(contexte.ContexteDonnee, obj.GetType());
                lstObjetsSpv.AssureLectureFaite();
                string strIdObjetTimosInObjetSpv = obj.GetChampIdObjetTimos();
                Type   tpMappable = typeof(CMappeurTimos <,>).MakeGenericType(generics);
                IMappeurTimosNonGenerique mappeur = Activator.CreateInstance(tpMappable) as IMappeurTimosNonGenerique;
                foreach (CObjetDonneeAIdNumerique objTimos in (CObjetDonneeAIdNumerique[])lstObjetsTimos.ToArray(typeof(CObjetDonneeAIdNumerique)))
                {
                    CObjetDonneeAIdNumerique objSpv = Activator.CreateInstance(tp, new object[] { contexte.ContexteDonnee }) as CObjetDonneeAIdNumerique;
                    if (!objSpv.ReadIfExists(new CFiltreData(strIdObjetTimosInObjetSpv + "=@1",
                                                             objTimos.Id), false))
                    {
                        mappeur.GetObjetSpvFromObjetTimosAvecCreationSansGenerique(objTimos);
                    }
                }
            }
            return(result);
        }
Esempio n. 15
0
        //------------------------------------------------------------------------------------------
        public void ReadArbre(CListeObjetsDonnees listeSource, CListeObjetsDonnees.CArbreProps arbre, List <string> lstPaquetsALire)
        {
            string strIdChamp   = "";
            string strPropriete = "";
            string strCle       = "";

            if (listeSource.Count == 0)
            {
                return;
            }
            bool bFromEntiteToChamp = false;

            if (!CDefinitionProprieteDynamique.DecomposeNomProprieteUnique(arbre.ProprietePrincipale, ref strCle, ref strPropriete))
            {
                return;
            }
            if (!CInfoRelationComposantFiltreEntiteToChampEntite.DecomposeNomPropriete(strPropriete, ref strIdChamp, ref bFromEntiteToChamp))
            {
                //c'est une relation vers des valeurs de champ qui pointent sur cette valeur.
                //Ignore, et traite tout dans le composant suivant qui est un Entité to champ à l'envers
                listeSource.ReadDependances(arbre);
                return;
            }
            //On a affaire à une liste source qui contient des valeurs qui sont pointées
            //par des valeurs de champs, et on veut les éléments qui pointent sur ces valeurs de champs

            CChampCustom champ      = new CChampCustom(listeSource.ContexteDonnee);
            CDbKey       dbKeyChamp = CDbKey.CreateFromStringValue(strIdChamp);

            if (!champ.ReadIfExists(dbKeyChamp))
            {
                return;
            }
            //Vérifie que la liste source est bien du type de données du champ custom
            if (champ.TypeDonnee.TypeDotNetNatif != listeSource.TypeObjets)
            {
                return;
            }
            IObjetDonneeAIdNumerique obj = listeSource[0] as IObjetDonneeAIdNumerique;

            if (obj == null)
            {
                return;
            }
            string strChampId = obj.GetChampId();

            if (lstPaquetsALire == null)
            {
                lstPaquetsALire = listeSource.GetPaquetsPourLectureFils(strChampId, null);
            }

            //Trouve le type des éléments à champs
            Type typeElementsFinaux = champ.Role.TypeAssocie;
            //Trouve le type des relations aux elementAchamp_ChampCustom
            IObjetDonneeAChamps elt = Activator.CreateInstance(typeElementsFinaux, new object[] { listeSource.ContexteDonnee }) as IObjetDonneeAChamps;

            if (elt == null)
            {
                return;
            }
            string strNomTableRelToChamp = elt.GetNomTableRelationToChamps();
            Type   tpRelToChamp          = CContexteDonnee.GetTypeForTable(strNomTableRelToChamp);

            if (tpRelToChamp == null)
            {
                return;
            }
            foreach (string strPaquet in lstPaquetsALire)
            {
                CListeObjetsDonnees lst = new CListeObjetsDonnees(listeSource.ContexteDonnee, typeElementsFinaux);

                //TESTDBKEYTODO
                string strChampCustomId = dbKeyChamp.IsNumericalId() ? CChampCustom.c_champId : CObjetDonnee.c_champIdUniversel;

                lst.Filtre = new CFiltreDataAvance(
                    CContexteDonnee.GetNomTableForType(typeElementsFinaux),
                    strNomTableRelToChamp + "." + strChampCustomId + "=@1 and " +
                    strNomTableRelToChamp + "." + CRelationElementAChamp_ChampCustom.c_champValeurInt + " in " +
                    strPaquet,
                    dbKeyChamp.GetValeurInDb());
                lst.AssureLectureFaite();
                lst.ReadDependances(arbre);
            }
        }
        //**********************************************************************************
        public void ReadArbre(CListeObjetsDonnees listeSource, CListeObjetsDonnees.CArbreProps arbre, List <string> lstPaquetsALire)
        {
            if (listeSource.Count == 0)
            {
                return;
            }
            CObjetDonneeAIdNumerique objExemple = listeSource[0] as CObjetDonneeAIdNumerique;

            if (objExemple == null)
            {
                return;
            }
            string strCle         = "";
            string strPropSansCle = "";

            if (!CDefinitionProprieteDynamique.DecomposeNomProprieteUnique(arbre.ProprietePrincipale, ref strCle, ref strPropSansCle))
            {
                return;
            }
            //trouve la relation correspondante à l'identifiant de la propriété
            RelationTypeIdAttribute relation = null;

            foreach (RelationTypeIdAttribute relTest in CContexteDonnee.RelationsTypeIds)
            {
                if (relTest.IdRelation == strPropSansCle)
                {
                    relation = relTest;
                    break;
                }
            }
            if (relation == null)
            {
                return;
            }

            string     strNomColDep = relation.GetNomColDepLue();
            DataColumn col          = objExemple.Table.Columns[strNomColDep];

            if (col == null)
            {
                col = new DataColumn(strNomColDep, typeof(bool));
                col.DefaultValue = false;
                col.AllowDBNull  = false;
                objExemple.Table.Columns.Add(col);
            }

            if (lstPaquetsALire == null)
            {
                lstPaquetsALire = listeSource.GetPaquetsPourLectureFils(objExemple.GetChampId(), col);
            }

            foreach (string strPaquet in lstPaquetsALire)
            {
                if (strPaquet != null && strPaquet.Trim().Length > 0)
                {
                    CListeObjetsDonnees lst = new CListeObjetsDonnees(listeSource.ContexteDonnee,
                                                                      CContexteDonnee.GetTypeForTable(relation.TableFille));
                    lst.Filtre = new CFiltreData(
                        relation.ChampType + "=@1 and " +
                        relation.ChampId + " in " + strPaquet,
                        listeSource.TypeObjets.ToString());
                    lst.AssureLectureFaite();
                    lst.ReadDependances(arbre);
                }
            }

            foreach (CObjetDonneeAIdNumerique obj in listeSource)
            {
                CContexteDonnee.ChangeRowSansDetectionModification(obj.Row, strNomColDep, true);
            }
        }
Esempio n. 17
0
        public static CResultAErreur DoTraitementExterneAvantSauvegarde(CContexteDonnee contexte, Hashtable tableData)
        {
            CResultAErreur result = CResultAErreur.True;
            Type           tp;

            ArrayList lst = new ArrayList(contexte.Tables);

            foreach (DataTable table in lst)
            {
                tp = null;
                ArrayList listeChampsDate = (ArrayList)m_tableChampsDate[table.TableName];
                #region récupération des champs date
                if (listeChampsDate == null)
                {
                    listeChampsDate = new ArrayList();
                    //Premier passage, cherche les champs date
                    foreach (DataColumn col in table.Columns)
                    {
                        if (col.DataType == typeof(DateTime) ||
                            col.DataType == typeof(CDateTimeEx) ||
                            col.DataType == typeof(DateTime?))
                        {
                            listeChampsDate.Add(col.ColumnName);
                        }
                    }
                    m_tableChampsDate[table.TableName] = listeChampsDate;
                }
                #endregion

                if (listeChampsDate.Count > 0 && table.PrimaryKey.Length == 1)
                {
                    Hashtable tablesQuiOntChange = new Hashtable();
                    //NomChamp->Méthode set associée
                    Hashtable tableChampToMethode = new Hashtable();
                    string    strCle  = table.PrimaryKey[0].ColumnName;
                    ArrayList lstRows = new ArrayList(table.Rows);

                    if (tp == null)
                    {
                        tp = CContexteDonnee.GetTypeForTable(table.TableName);
                    }

                    //Travaille par paquets de 500
                    for (int nRowLot = 0; nRowLot < lstRows.Count; nRowLot += 500)
                    {
                        int           nMin = Math.Min(lstRows.Count, nRowLot + 500);
                        StringBuilder bl   = new StringBuilder();
                        for (int nRow = nRowLot; nRow < nMin; nRow++)
                        {
                            DataRow rowTest = (DataRow)lstRows[nRow];
                            if (rowTest.RowState == DataRowState.Modified)
                            {
                                bl.Append(rowTest[strCle]);
                                bl.Append(",");
                            }
                        }
                        string strIds = bl.ToString();
                        if (strIds.Length > 0)
                        {
                            Type typeMainElementAChamp = null;
                            if (typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp))
                            {
                                CRelationElementAChamp_ChampCustom relation = (CRelationElementAChamp_ChampCustom)Activator.CreateInstance(tp, new object[] { contexte });
                                typeMainElementAChamp = relation.GetTypeElementAChamps();
                            }
                            strIds = strIds.Substring(0, strIds.Length - 1);
                            CFiltreData filtrePrinc = new CFiltreData(
                                CSynchronismeDonnees.c_champIdSource + " in (" + strIds + ") and " +
                                CSynchronismeDonnees.c_champTypeSource + "=@1",
                                typeMainElementAChamp == null?tp.ToString():typeMainElementAChamp.ToString());
                            CListeObjetsDonnees listeSynchro = new CListeObjetsDonnees(contexte, typeof(CSynchronismeDonnees), filtrePrinc);
                            listeSynchro.AssureLectureFaite();
                            listeSynchro.InterditLectureInDB = true;

                            CFiltreData filtreChercheMesSynchros = new CFiltreData(
                                CSynchronismeDonnees.c_champIdSource + "=@1", 0);

                            CFiltreData filtreChercheMesSynchrosChamp = new CFiltreData(
                                CSynchronismeDonnees.c_champIdSource + "=@1 and " +
                                CSynchronismeDonnees.c_champChampSource + "=@2",
                                0, "");

                            if (listeSynchro.Count > 0)
                            {
                                foreach (DataRow row in lstRows)
                                {
                                    if (row.RowState == DataRowState.Modified)
                                    {
                                        int nCleElement = (int)row[strCle];
                                        filtreChercheMesSynchros.Parametres[0] = nCleElement;
                                        listeSynchro.Filtre = filtreChercheMesSynchros;
                                        if (listeSynchro.Count > 0)
                                        {
                                            foreach (string strChamp in listeChampsDate)
                                            {
                                                if (row[strChamp, DataRowVersion.Original] != DBNull.Value &&
                                                    row[strChamp, DataRowVersion.Current] != DBNull.Value)
                                                {
                                                    string   strIdChampSynchronisme = strChamp;
                                                    DateTime dtOrg, dtNew;
                                                    dtOrg = (DateTime)row[strChamp, DataRowVersion.Original];
                                                    dtNew = (DateTime)row[strChamp, DataRowVersion.Current];
                                                    if (!dtNew.Equals(dtOrg))
                                                    {
                                                        //La colonne a change. Cherche tous les synchronismes liés à cet élément


                                                        //Si c'est un champ custom, on cherche un synchro sur le type
                                                        //contenant le champ custom
                                                        if (typeof(CRelationElementAChamp_ChampCustom).IsAssignableFrom(tp))
                                                        {
                                                            CRelationElementAChamp_ChampCustom relation = (CRelationElementAChamp_ChampCustom)contexte.GetNewObjetForRow(row);
                                                            strIdChampSynchronisme = CSynchronismeDonnees.c_idChampCustom + row[CChampCustom.c_champId];
                                                            nCleElement            = relation.ElementAChamps.Id;
                                                        }
                                                        if (tp != null && tp.IsSubclassOf(typeof(CObjetDonneeAIdNumerique)))
                                                        {
                                                            filtreChercheMesSynchrosChamp.Parametres[0] = nCleElement;
                                                            filtreChercheMesSynchrosChamp.Parametres[1] = strIdChampSynchronisme;
                                                            listeSynchro.Filtre = filtreChercheMesSynchrosChamp;
                                                            if (listeSynchro.Count > 0)
                                                            {
                                                                TimeSpan sp = (DateTime)row[strChamp, DataRowVersion.Current] -
                                                                              (DateTime)row[strChamp, DataRowVersion.Original];
                                                                foreach (CSynchronismeDonnees synchro in listeSynchro)
                                                                {
                                                                    CObjetDonneeAIdNumerique objetDest = synchro.ObjetDest;
                                                                    if (objetDest != null)
                                                                    {
                                                                        string strChampDest = synchro.ChampDest;
                                                                        //La donnée n'est synchronisée que si elle est
                                                                        //égale à sa valeur d'origine
                                                                        if (synchro.ChampDest.IndexOf(CSynchronismeDonnees.c_idChampCustom) == 0)
                                                                        {
                                                                            //C'est un champ custom.
                                                                            if (objetDest is IElementAChamps)
                                                                            {
                                                                                CListeObjetsDonnees listeRels = ((IElementAChamps)objetDest).RelationsChampsCustom;
                                                                                int nIdChamp = Int32.Parse(synchro.ChampDest.Substring(
                                                                                                               CSynchronismeDonnees.c_idChampCustom.Length));
                                                                                listeRels.Filtre = new CFiltreData(CChampCustom.c_champId + "=@1",
                                                                                                                   nIdChamp);
                                                                                if (listeRels.Count != 0)
                                                                                {
                                                                                    objetDest    = (CObjetDonneeAIdNumerique)listeRels[0];
                                                                                    strChampDest = CRelationElementAChamp_ChampCustom.c_champValeurDate;
                                                                                }
                                                                                else
                                                                                {
                                                                                    objetDest = null;
                                                                                }
                                                                            }
                                                                            else
                                                                            {
                                                                                objetDest = null;
                                                                            }
                                                                        }
                                                                        if (objetDest != null && objetDest.Row[strChampDest] != DBNull.Value)
                                                                        {
                                                                            object valeurOld      = null;
                                                                            object valeurCourante = objetDest.Row[strChampDest, DataRowVersion.Current];
                                                                            if (objetDest.Row.HasVersion(DataRowVersion.Original))
                                                                            {
                                                                                valeurOld = objetDest.Row[strChampDest, DataRowVersion.Original];
                                                                            }
                                                                            if (objetDest.Row.RowState != DataRowState.Deleted &&
                                                                                (objetDest.Row.RowState != DataRowState.Modified ||
                                                                                 valeurCourante.Equals(valeurOld)))
                                                                            {
                                                                                MethodInfo method = (MethodInfo)tableChampToMethode[strChampDest];
                                                                                if (method == null)
                                                                                ///Cherche la méthode associée au champ
                                                                                {
                                                                                    CStructureTable structure = CStructureTable.GetStructure(objetDest.GetType());
                                                                                    foreach (CInfoChampTable champ in structure.Champs)
                                                                                    {
                                                                                        if (champ.NomChamp == strChampDest)
                                                                                        {
                                                                                            PropertyInfo prop = objetDest.GetType().GetProperty(champ.Propriete);
                                                                                            if (prop != null)
                                                                                            {
                                                                                                method = prop.GetSetMethod(true);
                                                                                                tableChampToMethode[strChampDest] = method;
                                                                                            }
                                                                                            break;
                                                                                        }
                                                                                    }
                                                                                }
                                                                                DateTime dt = (DateTime)objetDest.Row[strChampDest];
                                                                                dt = dt.Add(sp);
                                                                                if (method == null)
                                                                                {
                                                                                    objetDest.Row[strChampDest] = dt;
                                                                                }
                                                                                else
                                                                                {
                                                                                    method.Invoke(objetDest, new object[] { dt });
                                                                                }
                                                                                tablesQuiOntChange[objetDest.GetNomTable()] = true;
                                                                            }
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                    foreach (string strNomTable in tablesQuiOntChange.Keys)
                    {
                        result += contexte.GetTableLoader(strNomTable).TraitementAvantSauvegarde(contexte);
                        if (!result)
                        {
                            break;
                        }
                    }
                }
            }
            return(result);
        }
        //-------------------------------------------------------------------
        private static void AlloueCode(IObjetHierarchiqueACodeHierarchique objet, ref int nLastCodeAlloue)
        {
            if (nLastCodeAlloue == 0 && m_dicLastCodeForType.ContainsKey(objet.GetType()))
            {
                nLastCodeAlloue = m_dicLastCodeForType[objet.GetType()];
            }
            string strCle = "";

            if (nLastCodeAlloue > 0 && objet.ObjetParent == null)
            {
                //Teste la valeur suivante
                int nTmp = nLastCodeAlloue + 1;
                strCle = GetCle(nTmp, objet.NbCarsParNiveau);
                CListeObjetsDonnees lstExt = new CListeObjetsDonnees(objet.ContexteDonnee,
                                                                     objet.GetType(),
                                                                     new CFiltreData(objet.ChampIdParent + " is null and " +
                                                                                     objet.ChampCodeSystemePartiel + "=@1", strCle));
                if (lstExt.CountNoLoad == 0)
                {
                    nLastCodeAlloue = nTmp;
                    objet.ChangeCodePartiel(strCle);
                    m_dicLastCodeForType[objet.GetType()] = nLastCodeAlloue;
                    return;
                }
            }
            CFiltreData filtre = null;

            if (objet.ObjetParent != null)
            {
                filtre = new CFiltreData(objet.ChampIdParent + "=@1",
                                         objet.ObjetParent.Id);
            }
            else
            {
                filtre = new CFiltreData(objet.ChampIdParent + " is null and " +
                                         objet.ChampCodeSystemePartiel + ">@1", GetCle(nLastCodeAlloue, objet.NbCarsParNiveau));
            }

            CListeObjetsDonnees listeSoeurs = new CListeObjetsDonnees(objet.ContexteDonnee, objet.GetType(), filtre);

            listeSoeurs.PreserveChanges = true;
            listeSoeurs.AssureLectureFaite();

            listeSoeurs.InterditLectureInDB = true;

            Hashtable tableCodesUtilises = new Hashtable();

            foreach (IObjetHierarchiqueACodeHierarchique obj in listeSoeurs)
            {
                tableCodesUtilises[obj.CodeSystemePartiel] = true;
            }

            //Cherche le prochain numéro libre
            int nCpt = nLastCodeAlloue;

            strCle = "";
            do
            {
                nCpt++;
                strCle = GetCle(nCpt, objet.NbCarsParNiveau);

                /*listeSoeurs.Filtre = new CFiltreData(objet.ChampCodeSystemePartiel + "=@1",
                 *      strCle);*/
            }while (tableCodesUtilises.ContainsKey(strCle));
            nLastCodeAlloue = nCpt;
            objet.ChangeCodePartiel(strCle);
            m_dicLastCodeForType[objet.GetType()] = nLastCodeAlloue;
        }
Esempio n. 19
0
        public void UpdateOnglets()
        {
            this.SuspendDrawing();
            try
            {
                /*if (!LockEdition)
                 * {
                 *  //valide les modifs car on va tout supprimer
                 *  MAJ_Champs();
                 * }*/
                Crownwood.Magic.Controls.TabPage pageSelect = this.SelectedTab;
                m_bIsInitializing = true;
                Hashtable tablePagesToHide = new Hashtable();
                ArrayList pages            = new ArrayList(TabPages);
                foreach (Crownwood.Magic.Controls.TabPage page in pages)
                {
                    m_tablePagesInit[page] = false;
                    tablePagesToHide[page] = true;
                    TabPages.Remove(page);
                }

                if (m_elementEdite == null)
                {
                    return;
                }

                /* YK : On obtient la session de l'objet en cours d'édition au lieur de la session par défaut */
                CSessionClient           session     = null;
                IObjetDonneeAIdNumerique objetDonnee = m_elementEdite as IObjetDonneeAIdNumerique;
                if (objetDonnee != null)
                {
                    session = CSessionClient.GetSessionForIdSession(objetDonnee.ContexteDonnee.IdSession);
                }
                else
                {
                    session = CSessionClient.GetSessionUnique();
                }

                ArrayList lstFormulaires = new ArrayList(m_listeFormulaires);
                lstFormulaires.Sort(new CSorterFormulaires());
                //Lit les champs liés et leurs valeurs
                StringBuilder bl = new StringBuilder();
                foreach (CFormulaire formulaire in lstFormulaires)
                {
                    bl.Append(formulaire.Id);
                    bl.Append(",");
                }
                if (bl.Length > 0)
                {
                    bl.Remove(bl.Length - 1, 1);
                    CListeObjetsDonnees lst = new CListeObjetsDonnees(((CFormulaire)lstFormulaires[0]).ContexteDonnee, typeof(CFormulaire));
                    lst.Filtre = new CFiltreData(CFormulaire.c_champId + " in (" + bl.ToString() + ")");
                    lst.AssureLectureFaite();
                    lst.ReadDependances("RelationsChamps", "RelationsChamps.Champ", "RelationsChamps.Champ.ListeValeurs");
                }


                foreach (CFormulaire formulaire in lstFormulaires)
                {
                    Crownwood.Magic.Controls.TabPage page = null;
                    m_tableIdFormulaireToTabPage.TryGetValue(formulaire.Id, out page);
                    CCreateur2iFormulaireObjetDonnee createur = null;

                    if (page == null)
                    {
                        C2iWndFenetre wnd = formulaire.Formulaire;
                        if (wnd != null)
                        {
                            page      = new Crownwood.Magic.Controls.TabPage(wnd.Text);
                            page.Name = formulaire.IdUniversel;
                            if (wnd.Text == "")
                            {
                                page.Title = formulaire.Libelle;
                            }
                            TabPages.Add(page);
                            if (m_tableCreateurs.ContainsKey(page))
                            {
                                m_tableCreateurs.Remove(page);
                            }
                            m_tablePageTo2iWnd[page] = wnd;
                            m_tableIdFormulaireToTabPage[formulaire.Id] = page;
                            m_tablePageToIdFormulaire[page]             = formulaire.Id;
                        }
                    }
                    else
                    {
                        m_tableCreateurs.TryGetValue(page, out createur);
                    }

                    if (page != null)
                    {
                        if (!TabPages.Contains(page))
                        {
                            TabPages.Add(page);
                        }
                        tablePagesToHide.Remove(page);
                    }
                }


                /*CChampCustom[] champs = ElementEdite.GetChampsHorsFormulaire();
                 * if ( champs.Length != 0 )
                 * {
                 *  UpdatePageChamps( nRest );
                 *  if ( m_pageGrid != null )
                 *      tablePagesToHide.Remove(m_pageGrid);
                 * }*/
                foreach (Crownwood.Magic.Controls.TabPage pageToDel in tablePagesToHide.Keys)
                {
                    if (TabPages.Contains(pageToDel))
                    {
                        TabPages.Remove(pageToDel);
                    }
                }

                if (TabPages.Count == 1)
                {
                    this.HideTabsMode = Crownwood.Magic.Controls.TabControl.HideTabsModes.HideAlways;
                }
                else
                {
                    this.HideTabsMode = Crownwood.Magic.Controls.TabControl.HideTabsModes.ShowAlways;
                }
                if (TabPages.Contains(pageSelect))
                {
                    SelectedTab = pageSelect;
                }
                if (SelectedTab != null)
                {
                    InitPageWithObjetCourant(SelectedTab);
                }
            }
            finally
            {
                this.ResumeDrawing();
            }
            m_bIsInitializing = false;
        }
Esempio n. 20
0
        //----------------------------------------------------------------------------------
        public CResultAErreur ExportSimple(int nIdSession, IEnumerable list, ref DataSet ds, IIndicateurProgression indicateur)
        {
            if (m_cacheValeurs == null)
            {
                m_cacheValeurs = new CCacheValeursProprietes();
            }
            DateTime       dt     = DateTime.Now;
            CResultAErreur result = CResultAErreur.True;

            if (list != null && !(list is CListeObjetsDonnees))
            {
                result.EmpileErreur(I.T("Impossible to use a simple export with something other than a Data Object list|102"));
                return(result);
            }
            CListeObjetsDonnees listeObjets         = (CListeObjetsDonnees)list;
            CContexteDonnee     contexteDestination = new CContexteDonnee(nIdSession, true, false);

            result = contexteDestination.SetVersionDeTravail(listeObjets.ContexteDonnee.IdVersionDeTravail, false);
            if (!result)
            {
                return(result);
            }
            contexteDestination.EnforceConstraints = false;            //Ca gagne un temps fou !!!
            ds = contexteDestination;

            //Crée la table principale
            DataTable tablePrincipale = contexteDestination.GetTableSafe(CContexteDonnee.GetNomTableForType(m_typeSource));

            if (tablePrincipale == null)
            {
                result.EmpileErreur(I.T("Error during the creation of the main table|103"));
                return(result);
            }

            if (listeObjets != null)
            {
                //Exporte les objets dans la table principale
                foreach (CObjetDonnee objet in listeObjets)
                {
                    tablePrincipale.ImportRow(objet.Row.Row);
                }
            }


            foreach (C2iChampExport champ in Table.Champs)
            //Crée les colonnes calculées et champs custom
            {
                result = CreateChampInTable(champ, tablePrincipale);
                if (!result)
                {
                    result.EmpileErreur(I.T("Error during field @1 creation|104", champ.NomChamp));
                    return(result);
                }
            }
            //Crée les autres tables
            foreach (C2iTableExport tableFille in Table.TablesFilles)
            {
                CreateTableSimpleInDataset(tableFille, contexteDestination, m_typeSource);
            }

            foreach (DataTable table in contexteDestination.Tables)
            {
                ArrayList lstColsToDelete = new ArrayList();
                foreach (DataColumn col in table.Columns)
                {
                    if (col.DataType == typeof(CDonneeBinaireInRow))
                    {
                        lstColsToDelete.Add(col);
                    }
                }
                foreach (DataColumn col in lstColsToDelete)
                {
                    table.Columns.Remove(col);
                }
            }

            if (listeObjets == null)
            {
                AddTablesCalculees(contexteDestination, null);
            }

            if (listeObjets == null)
            {
                return(result);
            }


            CListeObjetsDonnees listeDestination = new CListeObjetsDonnees(contexteDestination, m_typeSource, false);

            listeDestination.InterditLectureInDB = true;


            //Lit les dépendances dans le contexte
            //Récupère toutes les sous tables nécéssaires
            string[]  definitionsOrigines = GetDependancesDeTableSimple(listeObjets.ContexteDonnee);
            Hashtable tableDependances    = new Hashtable();

            foreach (string def in definitionsOrigines)
            {
                tableDependances[def] = true;
            }
            string[] strDependances = new string[tableDependances.Count];
            int      nDependance    = 0;

            foreach (string strDependance in tableDependances.Keys)
            {
                strDependances[nDependance] = strDependance;
                nDependance++;
            }

            listeDestination.ReadDependances(strDependances);
            //Et voila, le tour est joué, toutes les données sont dans le dataset de destination

            //Il manque juste les compositions des éléments nouveaux
            if (listeObjets != null)
            {
                //Exporte les compositions des objets nouveaux
                foreach (CObjetDonnee objet in listeObjets)
                {
                    if (objet.IsNew())                      //Si nouveau, charge directement toutes ses données
                    {
                        objet.ContexteDonnee.CopieRowTo(objet.Row.Row, contexteDestination, true, false, false);
                    }
                }
            }
            //S'assure que toutes les données sont lues
            foreach (DataTable table in contexteDestination.Tables)
            {
                DataView view = new DataView(table);
                view.RowFilter = CContexteDonnee.c_colIsToRead + "=1";
                foreach (DataRowView rowView in view)
                {
                    contexteDestination.ReadRow(rowView.Row);
                }
            }



            //Ramène les champs calculés
            List <ITableExport> toutesLesTables = ToutesLesTables();

            m_cacheValeurs.CacheEnabled = true;
            int nNbTotalPrincipal = tablePrincipale.Rows.Count;

            //Récupère les champs par ID
            //Id->Nom du champ
            Dictionary <int, CChampCustom> dicoChamps  = new Dictionary <int, CChampCustom>();
            CListeObjetsDonnees            listeChamps = new CListeObjetsDonnees(contexteDestination, typeof(CChampCustom));

            foreach (CChampCustom champ in listeChamps)
            {
                dicoChamps[champ.Id] = champ;
            }

            //Liste des tables à conserver au final
            Hashtable tableTablesAConserver = new Hashtable();

            foreach (C2iTableExport table in toutesLesTables)
            {
                string    strNomTable      = "";
                DataTable tableDestination = tablePrincipale;
                if (table.ChampOrigine != null)
                {
                    strNomTable      = CContexteDonnee.GetNomTableForType(table.ChampOrigine.TypeDonnee.TypeDotNetNatif);
                    tableDestination = contexteDestination.Tables[strNomTable];
                }
                if (tableDestination != null)
                {
                    tableTablesAConserver[tableDestination.TableName] = true;
                    List <C2iChampExport> champsCalcules = new List <C2iChampExport>();
                    List <C2iChampExport> champsCustoms  = new List <C2iChampExport>();
                    foreach (C2iChampExport champ in table.Champs)
                    {
                        if (champ.Origine is C2iOrigineChampExportExpression)
                        {
                            champsCalcules.Add(champ);
                        }
                        if (champ.Origine is C2iOrigineChampExportChampCustom)
                        {
                            champsCustoms.Add(champ);
                        }
                    }

                    if (champsCalcules.Count != 0)
                    {
                        Type tp = CContexteDonnee.GetTypeForTable(tableDestination.TableName);
                        foreach (DataRow row in tableDestination.Rows)
                        {
#if PDA
                            CObjetDonnee objet = (CObjetDonnee)Activator.CreateInstance(tp);
                            objet.SetRow(row);
#else
                            object objet = Activator.CreateInstance(tp, new object[] { row });
#endif
                            foreach (C2iChampExport chp in champsCalcules)
                            {
                                if (chp.Origine is C2iOrigineChampExportExpression)
                                {
                                    object valeur = chp.GetValeur(objet, m_cacheValeurs, null);
                                    if (valeur == null)
                                    {
                                        valeur = DBNull.Value;
                                    }
                                    row[chp.NomChamp] = valeur;
                                }
                            }
                            m_cacheValeurs.ResetCache(  );
                        }
                    }
                    if (champsCustoms.Count > 0)
                    {
                        Type tp = CContexteDonnee.GetTypeForTable(tableDestination.TableName);
                        if (typeof(IObjetDonneeAChamps).IsAssignableFrom(tp))
                        {
                            IObjetDonneeAChamps element  = (IObjetDonneeAChamps)Activator.CreateInstance(tp, contexteDestination);
                            string strTableValeursChamps = element.GetNomTableRelationToChamps();
                            Type   tpValeursChamps       = CContexteDonnee.GetTypeForTable(strTableValeursChamps);

                            //Travaille les valeurs de champs customs par paquet de 500;
                            int    nTaillePaquet = 500;
                            int    nMax          = tableDestination.Rows.Count;
                            string strChampId    = tableDestination.PrimaryKey[0].ColumnName;
                            for (int nPaquet = 0; nPaquet < nMax; nPaquet += nTaillePaquet)
                            {
                                StringBuilder bl   = new StringBuilder();
                                int           nFin = Math.Min(nMax, nPaquet + nTaillePaquet);
                                for (int nRow = nPaquet; nRow < nFin; nRow++)
                                {
                                    bl.Append(tableDestination.Rows[nRow][strChampId]);
                                    bl.Append(',');
                                }
                                if (bl.Length > 0)
                                {
                                    bl.Remove(bl.Length - 1, 1);
                                    string strIds = bl.ToString();
                                    foreach (C2iChampExport champACustom in champsCustoms)
                                    {
                                        C2iOrigineChampExportChampCustom origineChamp = (C2iOrigineChampExportChampCustom)champACustom.Origine;

                                        //C'est un élément à champ, donc, va requeter dans les champs customs pour avoir les
                                        //valeurs
                                        CListeObjetsDonnees listeValeurs = new CListeObjetsDonnees(contexteDestination, tpValeursChamps);
                                        StringBuilder       blIdsChamps  = new StringBuilder();
                                        foreach (int nId in origineChamp.IdsChampCustom)
                                        {
                                            blIdsChamps.Append(nId);
                                            blIdsChamps.Append(',');
                                        }
                                        if (blIdsChamps.Length > 0)
                                        {
                                            blIdsChamps.Remove(blIdsChamps.Length - 1, 1);
                                            listeValeurs.Filtre = new CFiltreData(
                                                CChampCustom.c_champId + " in (" + blIdsChamps.ToString() + ") and " +
                                                strChampId + " in (" + strIds + ")");
                                            listeValeurs.AssureLectureFaite();
                                            //On n'a plus qu'à rebasculer les valeurs dans la table
                                            foreach (CRelationElementAChamp_ChampCustom valeur in listeValeurs)
                                            {
                                                try
                                                {
                                                    DataRow rowAttachee = tableDestination.Rows.Find(valeur.Row[strChampId]);
                                                    if (rowAttachee != null)
                                                    {
                                                        object valTmp = valeur.Valeur;
                                                        if (valTmp == null)
                                                        {
                                                            valTmp = DBNull.Value;
                                                        }
                                                        rowAttachee[c_strPrefixeChampCustom + valeur.ChampCustom.Nom] = valTmp;
                                                    }
                                                }
                                                catch
                                                { }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
            m_cacheValeurs.ResetCache();
            ArrayList lstTablesToDelete = new ArrayList();
            foreach (DataTable table in contexteDestination.Tables)
            {
                if (tableTablesAConserver[table.TableName] == null)
                {
                    lstTablesToDelete.Add(table);
                }
            }
            foreach (DataTable table in lstTablesToDelete)
            {
                contexteDestination.SupprimeTableEtContraintes(table);
            }

            AddTablesCalculees(contexteDestination, null);

            return(result);
        }
Esempio n. 21
0
        //----------------------------------------------------------
        public List <ITranchePlanning> GetTranchesForElementsAInterventionBetween(DateTime dateDebut, DateTime dateFin)
        {
            List <ITranchePlanning> lstRetour = new List <ITranchePlanning>();

            Hashtable tableTypeToIds = new Hashtable();

            if (m_listeElementsAInterventions.Count == 0)
            {
                return(lstRetour);
            }

            //Si tous les elements à Intervention sont du même type
            foreach (IElementAIntervention elt in m_listeElementsAInterventions)
            {
                string strIds = (string)tableTypeToIds[elt.GetType()];
                if (strIds == null)
                {
                    strIds = elt.Id + "";
                }
                else
                {
                    strIds += ";" + elt.Id;
                }
                tableTypeToIds[elt.GetType()] = strIds;
            }
            dateFin = dateFin.AddDays(1);

            foreach (DictionaryEntry entry in tableTypeToIds)
            {
                Type   tp     = (Type)entry.Key;
                string strIds = (string)entry.Value;
                if (tp == typeof(CSite))
                {
                    CListeObjetsDonnees liste = new CListeObjetsDonnees(ContexteDonnee, typeof(CFractionIntervention));
                    liste.PreserveChanges = true;
                    liste.Filtre          = new CFiltreDataAvance(
                        CFractionIntervention.c_nomTable,
                        CIntervention.c_nomTable + "." + CIntervention.c_champIdElementLie + " in (" + strIds + ") and " +
                        CFractionIntervention.c_champDateDebutPlanifie + "<@1 and " +
                        CFractionIntervention.c_champDateFinPlanifiee + ">@2",
                        dateFin,
                        dateDebut
                        );
                    //Lit dans la base
                    liste.AssureLectureFaite();
                    liste.ReadDependances("Intervention");
                    m_contexteDonnee.GetTableSafe(CIntervention.c_nomTable);
                    strIds = strIds.Replace(';', ',');


                    string strNomRelation = m_contexteDonnee.GetForeignKeyName(typeof(CFractionIntervention), "Intervention");
                    //Et filtre sur les existants (pour prendre les nouveaux en compte)
                    string strFiltre = "Parent(" + strNomRelation + ")." + CIntervention.c_champIdElementLie + " in (" + strIds + ") and " +
                                       CFractionIntervention.c_champDateDebutPlanifie + "<=" + dateFin.ToString("#MM/dd/yyyy#") + " and " +
                                       CFractionIntervention.c_champDateFinPlanifiee + ">=" + dateDebut.ToString("#MM/dd/yyyy#") + "";
                    DataTable table = m_contexteDonnee.Tables[CFractionIntervention.c_nomTable];
                    DataRow[] rows  = table.Select(strFiltre);
                    foreach (DataRow row in rows)
                    {
                        lstRetour.Add(new CFractionIntervention(row));
                    }
                }
            }
            return(lstRetour);
        }
Esempio n. 22
0
        /// <summary>
        /// Stocke le résultat d'une requête pour un type de données
        /// </summary>
        /// <param name="nIdTypeDonnee"></param>
        /// <param name="requete"></param>
        /// <returns></returns>
        public CResultAErreur StockeResultat(int nIdTypeDonnee, IIndicateurProgression indicateur)
        {
            using (C2iSponsor sponsor = new C2iSponsor())
            {
                sponsor.Register(indicateur);
                CResultAErreur result = CResultAErreur.True;
                if (m_tableCalculsEnCours[nIdTypeDonnee] != null)
                {
                    result.EmpileErreur(I.T("The recalculation for this cumulated data type is already in progress|143"));
                    return(result);
                }
                m_tableCalculsEnCours[nIdTypeDonnee] = true;
                CSessionProcessServeurSuivi sessionSuivi = null;
                try
                {
                    //Crée une session pour le calcul
                    CSessionClient session = CSessionClient.GetSessionForIdSession(IdSession);
                    if (session == null)
                    {
                        result.EmpileErreur(I.T("Session error|144"));
                        return(result);
                    }

                    System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.BelowNormal;
                    sessionSuivi = new CSessionProcessServeurSuivi();
                    result       = sessionSuivi.OpenSession(new CAuthentificationSessionServer(),
                                                            I.T("Recalculation of datas @1|145", nIdTypeDonnee.ToString()),
                                                            session);
                    if (!result)
                    {
                        result.EmpileErreur(I.T("Opening session error|146"));
                        return(result);
                    }
                    IdSession = sessionSuivi.IdSession;
                    System.Threading.Thread.CurrentThread.Priority = System.Threading.ThreadPriority.Lowest;
                    using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
                    {
                        //Récupère le type de donnée
                        CTypeDonneeCumulee typeDonnee = new CTypeDonneeCumulee(contexte);
                        if (!typeDonnee.ReadIfExists(nIdTypeDonnee))
                        {
                            result.EmpileErreur(I.T("The cumulated data type @1 doesn't exist|147", nIdTypeDonnee.ToString()));
                            return(result);
                        }

                        if (indicateur != null)
                        {
                            indicateur.SetInfo(I.T("Existing datas recovery|148"));
                            indicateur.SetValue(0);
                        }

                        CParametreDonneeCumulee parametre = typeDonnee.Parametre;

                        //Lit les données pour ce type de donnée cumulée
                        CListeObjetsDonnees liste = new CListeObjetsDonnees(contexte, typeof(CDonneeCumulee));
                        liste.Filtre = new CFiltreData(CTypeDonneeCumulee.c_champId + "=@1",
                                                       nIdTypeDonnee);
                        liste.AssureLectureFaite();
                        if (parametre.ViderAvantChaqueCalcul)
                        {
                            result = VideTable(nIdTypeDonnee, contexte.Tables[CDonneeCumulee.c_nomTable]);
                            if (!result)
                            {
                                return(result);
                            }
                        }


                        //Liste des champs clé à lire
                        ArrayList lstClesALire = new ArrayList();
                        //Liste des champs destination des clés
                        ArrayList lstDestClesALire = new ArrayList();

                        //Liste des valeurs décimales à lire
                        ArrayList lstValeursDecimalesALire = new ArrayList();
                        //Liste des champs destinatation des valeurs décimales
                        ArrayList lstDestValeursDecimalesALire = new ArrayList();

                        //Liste des valeurs dates à lire
                        ArrayList lstValeursDatesALire = new ArrayList();
                        //Liste des champs destinatation des valeurs dates
                        ArrayList lstDestValeursDatesALire = new ArrayList();

                        //Liste des valeurs texte à lire
                        ArrayList lstValeursTextesALire = new ArrayList();
                        //Liste des champs destinatation des valeurs texte
                        ArrayList lstDestValeursTextesALire = new ArrayList();

                        //Change les clés de la table de données pour qu'elles
                        //correspondent aux clés déclarées
                        //Pour des recherches ultérieures plus rapides
                        DataTable    tableDonnees = contexte.Tables[CDonneeCumulee.c_nomTable];
                        DataColumn[] oldKey       = tableDonnees.PrimaryKey;
                        ArrayList    lstCles      = new ArrayList();

                        for (int nCle = 0; nCle < CParametreDonneeCumulee.c_nbChampsCle; nCle++)
                        {
                            if (parametre.GetChampCle(nCle) != null &&
                                parametre.GetChampCle(nCle).Champ != "")
                            {
                                lstClesALire.Add(parametre.GetChampCle(nCle).Champ);
                                string strChampDest = CDonneeCumulee.c_baseChampCle + nCle.ToString();
                                lstDestClesALire.Add(strChampDest);
                                lstCles.Add(tableDonnees.Columns[strChampDest]);
                            }
                        }
                        try
                        {
                            tableDonnees.PrimaryKey = (DataColumn[])lstCles.ToArray(typeof(DataColumn));
                        }
                        catch
                        {
                            //On n'y arrive pas, on a probablement changé la requete ->On vide tout !
                            result = VideTable(nIdTypeDonnee, tableDonnees);
                            if (!result)
                            {
                                return(result);
                            }
                            tableDonnees.PrimaryKey = (DataColumn[])lstCles.ToArray(typeof(DataColumn));
                        }

                        //Repère les données à lire
                        for (int nChamp = 0; nChamp < CParametreDonneeCumulee.c_nbChampsValeur; nChamp++)
                        {
                            string strChamp = parametre.GetValueField(nChamp);
                            if (strChamp != null && strChamp != "")
                            {
                                lstValeursDecimalesALire.Add(strChamp);
                                lstDestValeursDecimalesALire.Add(CDonneeCumulee.c_baseChampValeur + nChamp.ToString());
                            }
                        }

                        for (int nChamp = 0; nChamp < CParametreDonneeCumulee.c_nbChampsDate; nChamp++)
                        {
                            string strChamp = parametre.GetDateField(nChamp);
                            if (strChamp != null && strChamp != "")
                            {
                                lstValeursDatesALire.Add(strChamp);
                                lstDestValeursDatesALire.Add(CDonneeCumulee.c_baseChampDate + nChamp.ToString());
                            }
                        }

                        for (int nChamp = 0; nChamp < CParametreDonneeCumulee.c_nbChampsTexte; nChamp++)
                        {
                            string strChamp = parametre.GetTextField(nChamp);
                            if (strChamp != null && strChamp != "")
                            {
                                lstValeursTextesALire.Add(strChamp);
                                lstDestValeursTextesALire.Add(CDonneeCumulee.c_baseChampTexte + nChamp.ToString());
                            }
                        }

                        if (indicateur != null)
                        {
                            indicateur.SetInfo(I.T("Request execution|149"));
                            indicateur.SetValue(10);
                        }

                        IDefinitionJeuDonnees defJeu = typeDonnee.Parametre.DefinitionDeDonnees;
                        IElementAVariablesDynamiquesAvecContexteDonnee eltAVariables = null;
                        if (defJeu is C2iRequete)
                        {
                            eltAVariables = (IElementAVariablesDynamiquesAvecContexteDonnee)defJeu;
                        }
                        else if (defJeu is CStructureExportAvecFiltre)
                        {
                            eltAVariables = ((CStructureExportAvecFiltre)defJeu).Filtre;
                            if (eltAVariables == null)
                            {
                                CFiltreDynamique filtre = new CFiltreDynamique(contexte);
                                filtre.TypeElements = defJeu.TypeDonneesEntree;
                                eltAVariables       = filtre;
                            }
                            ((CFiltreDynamique)eltAVariables).ContexteDonnee = contexte;
                        }

                        result = CParametreDonneeCumulee.GetTableSource(eltAVariables, defJeu, indicateur);
                        //Calcule le résultat de la requête demandée
                        if (!result)
                        {
                            result.EmpileErreur(I.T("Error in request|150"));
                            return(result);
                        }

                        //Liste des lignes trouvées dans la requête
                        Hashtable tableExistantes = new Hashtable();

                        DataTable tableSource = (DataTable)result.Data;

                        if (indicateur != null)
                        {
                            indicateur.SetInfo(I.T("Result Storage|151"));
                            indicateur.SetValue(20);
                            indicateur.PushSegment(20, 80);
                            indicateur.SetBornesSegment(0, tableSource.Rows.Count);
                        }

                        int nIndex = 0;

                        foreach (DataRow row in tableSource.Rows)
                        {
                            nIndex++;
                            if (indicateur != null && nIndex % 50 == 0)
                            {
                                indicateur.SetValue(nIndex);
                            }
                            lstCles.Clear();
                            for (int nCle = 0; nCle < lstClesALire.Count; nCle++)
                            {
                                lstCles.Add(row[(string)lstClesALire[nCle]]);
                            }
                            DataRow rowDest = tableDonnees.Rows.Find((object[])lstCles.ToArray(typeof(object)));
                            if (rowDest == null)
                            {
                                rowDest = tableDonnees.NewRow();
                                rowDest[CObjetDonnee.c_champIdUniversel] = CUniqueIdentifier.GetNew();
                                for (int nCle = 0; nCle < lstCles.Count; nCle++)
                                {
                                    rowDest[(string)lstDestClesALire[nCle]] = lstCles[nCle];
                                }
                                rowDest[CTypeDonneeCumulee.c_champId] = nIdTypeDonnee;
                                tableDonnees.Rows.Add(rowDest);
                            }
                            // Rempli les valeurs décimales de destination
                            for (int nChampVal = 0; nChampVal < lstValeursDecimalesALire.Count; nChampVal++)
                            {
                                try
                                {
                                    rowDest[(string)lstDestValeursDecimalesALire[nChampVal]] = Convert.ToDouble(row[(string)lstValeursDecimalesALire[nChampVal]]);
                                }
                                catch
                                {
                                    rowDest[CDonneeCumulee.c_baseChampValeur + nChampVal.ToString()] = 0;
                                }
                            }
                            // Rempli les valeurs Dates de destination
                            for (int nChampVal = 0; nChampVal < lstValeursDatesALire.Count; nChampVal++)
                            {
                                try
                                {
                                    rowDest[(string)lstDestValeursDatesALire[nChampVal]] = Convert.ToDateTime(row[(string)lstValeursDatesALire[nChampVal]]);
                                }
                                catch
                                {
                                    rowDest[CDonneeCumulee.c_baseChampDate + nChampVal.ToString()] = DBNull.Value;
                                }
                            }
                            // Rempli les valeurs Texte de destination
                            for (int nChampVal = 0; nChampVal < lstValeursTextesALire.Count; nChampVal++)
                            {
                                try
                                {
                                    rowDest[(string)lstDestValeursTextesALire[nChampVal]] = (row[(string)lstValeursTextesALire[nChampVal]]).ToString();
                                }
                                catch
                                {
                                    rowDest[CDonneeCumulee.c_baseChampTexte + nChampVal.ToString()] = "";
                                }
                            }

                            tableExistantes[rowDest] = true;
                        }
                        //Remet la clé à la valeur initiale
                        tableDonnees.PrimaryKey = oldKey;

                        if (indicateur != null)
                        {
                            indicateur.PopSegment();
                            indicateur.PushSegment(80, 90);
                            indicateur.SetBornesSegment(0, tableDonnees.Rows.Count);
                            indicateur.SetInfo(I.T("Deleting of old values|152"));
                        }

                        if (!parametre.PasDeSuppression)
                        {
                            //Supprime les lignes à supprimer
                            ArrayList lstRows = new ArrayList(tableDonnees.Rows);
                            nIndex = 0;
                            foreach (DataRow row in lstRows)
                            {
                                if (!tableExistantes.Contains(row))
                                {
                                    row.Delete();
                                }
                                nIndex++;
                                if (indicateur != null && nIndex % 50 == 0)
                                {
                                    indicateur.SetValue(nIndex);
                                }
                            }
                        }
                        if (indicateur != null)
                        {
                            indicateur.PopSegment();
                            indicateur.SetInfo(I.T("Datas saving|153"));
                        }
                        contexte.EnableTraitementsAvantSauvegarde = false;
                        result = contexte.SaveAll(true);
                        if (indicateur != null)
                        {
                            indicateur.SetInfo(I.T("Finished calculation|154"));
                        }
                    }
                }
                catch (Exception e)
                {
                    result.EmpileErreur(new CErreurException(e));
                    return(result);
                }
                finally
                {
                    if (sessionSuivi != null)
                    {
                        sessionSuivi.CloseSession();
                    }
                    m_tableCalculsEnCours.Remove(nIdTypeDonnee);
                }
                return(result);
            }
        }
Esempio n. 23
0
        //----------------------------------------------------------
        public List <ITranchePlanning> GetOccupationsForRessourcesBetween(DateTime dateDebut, DateTime dateFin)
        {
            List <ITranchePlanning> lstRetour = new List <ITranchePlanning>();

            Hashtable tableTypeToIds = new Hashtable();

            if (m_listeRessources.Count == 0)
            {
                return(lstRetour);
            }

            CContexteDonnee contexte = m_listeRessources[0].ContexteDonnee;

            foreach (IRessourceEntreePlanning ressource in Ressources)
            {
                if (tableTypeToIds[ressource.GetType()] == null)
                {
                    tableTypeToIds[ressource.GetType()] = ressource.Id + "";
                }
                else
                {
                    string strId = (string)tableTypeToIds[ressource.GetType()];
                    strId += "," + ressource.Id;
                    tableTypeToIds[ressource.GetType()] = strId;
                }
            }

            dateFin = dateFin.AddDays(1);
            ///IdFraction->True si elle a déjà été ajoutée
            Hashtable tableFractions = new Hashtable();

            foreach (DictionaryEntry entry in tableTypeToIds)
            {
                Type   tp     = (Type)entry.Key;
                string strIds = (string)entry.Value;

                CListeObjetsDonnees liste;
                string strClauseRessource             = "";
                string strDependancesRessources       = "";
                string strTableLienRessource          = "";
                string strChampIdRessourceInTableLien = "";
                Type   typeLienRessource = null;
                if (tp == typeof(CActeur))
                {
                    strClauseRessource             = CIntervention_Intervenant.c_nomTable + "." + CActeur.c_champId + " in (" + strIds + ")";
                    strDependancesRessources       = "Intervention.RelationsIntervenants";
                    strTableLienRessource          = CIntervention_Intervenant.c_nomTable;
                    typeLienRessource              = typeof(CIntervention_Intervenant);
                    strChampIdRessourceInTableLien = CActeur.c_champId;
                }
                else if (tp == typeof(CRessourceMaterielle))
                {
                    strClauseRessource             = CIntervention_Ressource.c_nomTable + "." + CRessourceMaterielle.c_champId + " in (" + strIds + ")";
                    strDependancesRessources       = "Intervention.RelationsRessourcesMaterielles";
                    strTableLienRessource          = CIntervention_Ressource.c_nomTable;
                    typeLienRessource              = typeof(CIntervention_Ressource);
                    strChampIdRessourceInTableLien = CRessourceMaterielle.c_champId;
                }
                else
                {
                    throw new Exception("Type de ressource non prévu : " + tp.ToString());
                }
                liste = new CListeObjetsDonnees(contexte, typeof(CFractionIntervention));
                liste.PreserveChanges = true;
                liste.Filtre          = new CFiltreDataAvance(
                    CFractionIntervention.c_nomTable,
                    CIntervention.c_nomTable + "." +
                    strClauseRessource + " and " +
                    CFractionIntervention.c_champDateDebutPlanifie + "<@1 and " +
                    CFractionIntervention.c_champDateFinPlanifiee + ">@2",
                    dateFin,
                    dateDebut
                    );
                //Lit dans la base
                liste.AssureLectureFaite();
                liste.ReadDependances("Intervention", strDependancesRessources);
                contexte.GetTableSafe(CIntervention.c_nomTable);
                contexte.GetTableSafe(strTableLienRessource);

                string strNomRelationIntervention = contexte.GetForeignKeyName(typeof(CFractionIntervention), "Intervention");
                //Ne sélectionne que ceux qui sont liés à la ressource
                CListeObjetsDonnees listeInterventionIt = new CListeObjetsDonnees(contexte, typeLienRessource);
                listeInterventionIt.InterditLectureInDB = true;
                listeInterventionIt.Filtre = new CFiltreData(strChampIdRessourceInTableLien + " in (" + strIds + ")");
                string strIdsInterventions = "";
                foreach (IEntreePlanning_Ressource it in listeInterventionIt)
                {
                    strIdsInterventions += it.EntreePlanning.Id + ",";
                }
                if (strIdsInterventions.Length > 0)
                {
                    string strFiltre = "Parent(" + strNomRelationIntervention + ")." + CIntervention.c_champId + " in (" + strIdsInterventions + ") and " +
                                       CFractionIntervention.c_champDateDebutPlanifie + "<=" + dateFin.ToString("#MM/dd/yyyy#") + " and " +
                                       CFractionIntervention.c_champDateFinPlanifiee + ">=" + dateDebut.ToString("#MM/dd/yyyy#") + "";
                    DataTable table = contexte.Tables[CFractionIntervention.c_nomTable];
                    DataRow[] rows  = table.Select(strFiltre);
                    foreach (DataRow row in rows)
                    {
                        if (!tableFractions.Contains(row[CFractionIntervention.c_champId]))
                        {
                            lstRetour.Add(new CFractionIntervention(row));
                            tableFractions[row[CFractionIntervention.c_champId]] = true;
                        }
                    }
                }
            }

            return(lstRetour);
        }
        /// /////////////////////////////////////////////////////////
        public DataSet GetAddAndUpdateInTableMain(
            string strNomTable,
            int nSessionSyncDebut,
            int nSessionSyncFin,
            string strCodeGroupeSynchronisation)
        {
            Type    tp     = CContexteDonnee.GetTypeForTable(strNomTable);
            DataSet dsDest = null;

            if (tp == null)
            {
                return(null);
            }

            //Récupère les filtres
            CFiltresSynchronisation filtres = GetFiltres(strCodeGroupeSynchronisation);

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CFiltreData filtreSynchro = null;
                if (filtres != null)
                {
                    filtreSynchro = filtres.GetFiltreForTable(m_nIdSession, strNomTable);
                }

                if (filtreSynchro == null)
                {
                    filtreSynchro = new CFiltreData();
                }
                int    nNumParametreIdSync = filtreSynchro.Parametres.Count + 1;
                string strFiltre           = filtreSynchro.Filtre;
                filtreSynchro.Filtre = "(" + CSc2iDataConst.c_champIdSynchro + ">=@" + nNumParametreIdSync.ToString() + " and " +
                                       CSc2iDataConst.c_champIdSynchro + "<=@" + (nNumParametreIdSync + 1).ToString();
                if (nSessionSyncDebut == -1)
                //C'est la première synchro, intègre les éléments modifiés avant prise en charge
                //des synchros
                {
                    if (filtreSynchro is CFiltreDataAvance)
                    {
                        filtreSynchro.Filtre += " or hasno(" + CSc2iDataConst.c_champIdSynchro + ")";
                    }
                    else
                    {
                        filtreSynchro.Filtre += " or " + CSc2iDataConst.c_champIdSynchro + " is null";
                    }
                }
                filtreSynchro.Filtre += ")";
                if (strFiltre != "")
                {
                    filtreSynchro.Filtre += " and (" + strFiltre + ")";
                }
                filtreSynchro.Parametres.Add(nSessionSyncDebut);
                filtreSynchro.Parametres.Add(nSessionSyncFin);
                CListeObjetsDonnees liste = new CListeObjetsDonnees(contexte, tp, false);
                liste.Filtre = filtreSynchro;
                liste.AssureLectureFaite();

                //Charge les données de synchronisation
                CFiltreData filtreDataSync = new CFiltreData(CEntreeLogSynchronisation.c_champTable + "=@1 and " +
                                                             CSc2iDataConst.c_champIdSynchro + ">=@2 and " +
                                                             CSc2iDataConst.c_champIdSynchro + "<=@3",
                                                             strNomTable, nSessionSyncDebut, nSessionSyncFin);
                liste        = new CListeObjetsDonnees(contexte, typeof(CEntreeLogSynchronisation), false);
                liste.Filtre = filtreDataSync;
                liste.AssureLectureFaite();

                //Transforme le contexte en dataset (pour sérialisation web !! )
                dsDest = new DataSet();
                foreach (DataTable table in contexte.Tables)
                {
                    DataTable tableDest = CUtilDataSet.AddTableCopie(table, dsDest);
                    foreach (DataRow row in table.Rows)
                    {
                        tableDest.ImportRow(row);
                    }
                    //Supprime les colonnes blob
                    for (int nCol = tableDest.Columns.Count - 1; nCol >= 0; nCol--)
                    {
                        if (tableDest.Columns[nCol].DataType == typeof(CDonneeBinaireInRow))
                        {
                            tableDest.Columns.RemoveAt(nCol);
                        }
                    }
                }
            }
            return(dsDest);
        }
Esempio n. 25
0
        public void UpdateOnglets()
        {
            if (!LockEdition)
            {
                //valide les modifs car on va tout supprimer
                MAJ_Champs();
            }
            m_bIsInitializing = true;
            Hashtable tablePagesToHide = new Hashtable();

            foreach (Crownwood.Magic.Controls.TabPage page in TabPages)
            {
                m_tablePagesInit[page] = false;
                tablePagesToHide[page] = true;
            }

            if (m_elementEdite == null)
            {
                return;
            }

            /* YK : On obtient la session de l'objet en cours d'édition au lieur de la session par défaut */
            CSessionClient session = null;
            IObjetDonneeAIdNumeriqueAuto objetDonnee = m_elementEdite as IObjetDonneeAIdNumeriqueAuto;

            if (objetDonnee != null)
            {
                session = CSessionClient.GetSessionForIdSession(objetDonnee.ContexteDonnee.IdSession);
            }
            else
            {
                session = CSessionClient.GetSessionUnique();
            }

            ArrayList lstFormulaires = new ArrayList(m_elementEdite.GetFormulaires());

            lstFormulaires.Sort(new CSorterFormulaires());
            //Lit les champs liés et leurs valeurs
            StringBuilder bl = new StringBuilder();

            foreach (CFormulaire formulaire in lstFormulaires)
            {
                bl.Append(formulaire.Id);
                bl.Append(",");
            }
            if (bl.Length > 0)
            {
                bl.Remove(bl.Length - 1, 1);
                CListeObjetsDonnees lst = new CListeObjetsDonnees(((CFormulaire)lstFormulaires[0]).ContexteDonnee, typeof(CFormulaire));
                lst.Filtre = new CFiltreData(CFormulaire.c_champId + " in (" + bl.ToString() + ")");
                lst.AssureLectureFaite();
                lst.ReadDependances("RelationsChamps", "RelationsChamps.Champ", "RelationsChamps.Champ.ListeValeurs");
            }


            foreach (CFormulaire formulaire in lstFormulaires)
            {
                CRestrictionUtilisateurSurType restriction = new CRestrictionUtilisateurSurType(m_elementEdite.GetType());
                if (session.GetInfoUtilisateur() != null)
                {
                    int?nIdVersion = null;
                    IObjetAContexteDonnee objetAContexte = m_elementEdite as IObjetAContexteDonnee;
                    if (objetAContexte != null)
                    {
                        nIdVersion = objetAContexte.ContexteDonnee.IdVersionDeTravail;
                    }
                    restriction = session.GetInfoUtilisateur().GetRestrictionsSurObjet(m_elementEdite, nIdVersion);
                }

                ERestriction restrictionFormulaire = restriction.GetRestriction(formulaire.CleRestriction);

                if ((restrictionFormulaire & ERestriction.Hide) != ERestriction.Hide)
                {
                    Crownwood.Magic.Controls.TabPage page     = (Crownwood.Magic.Controls.TabPage)m_tableIdFormulaireToTabPage[formulaire.Id];
                    CCreateur2iFormulaire            createur = null;

                    if (page == null)
                    {
                        C2iWndFenetre wnd = formulaire.Formulaire;
                        if (wnd != null)
                        {
                            page = new Crownwood.Magic.Controls.TabPage(wnd.Text);
                            page.SuspendLayout();
                            if (wnd.Text == "")
                            {
                                page.Title = formulaire.Libelle;
                            }
                            TabPages.Add(page);
                            m_tableCreateurs[page]   = null;
                            m_tablePageTo2iWnd[page] = wnd;
                            m_tableIdFormulaireToTabPage[formulaire.Id] = page;
                        }
                    }
                    else
                    {
                        createur = (CCreateur2iFormulaire)m_tableCreateurs[page];
                    }

                    if (page != null)
                    {
                        m_tablePageToRestriction[page] = restrictionFormulaire;
                        if (!TabPages.Contains(page))
                        {
                            TabPages.Add(page);
                        }
                        tablePagesToHide.Remove(page);
                    }
                }
            }

            /*CChampCustom[] champs = ElementEdite.GetChampsHorsFormulaire();
             * if ( champs.Length != 0 )
             * {
             *      UpdatePageChamps( nRest );
             *      if ( m_pageGrid != null )
             *              tablePagesToHide.Remove(m_pageGrid);
             * }*/
            foreach (Crownwood.Magic.Controls.TabPage pageToDel in tablePagesToHide.Keys)
            {
                TabPages.Remove(pageToDel);
            }

            if (TabPages.Count == 1)
            {
                this.HideTabsMode = Crownwood.Magic.Controls.TabControl.HideTabsModes.HideAlways;
            }
            else
            {
                this.HideTabsMode = Crownwood.Magic.Controls.TabControl.HideTabsModes.ShowAlways;
            }
            if (SelectedTab != null)
            {
                InitPageWithObjetCourant(SelectedTab);
            }
            m_bIsInitializing = false;
        }
Esempio n. 26
0
        //Initialise la base des alarmes en cours avec les alarmes de la base
        private void LoadAlarmesForElement(string strChampDansAlarme, CDictionnaireConcerne dicConcernes)
        {
            List <CDbKey> lstKeysElements = new List <CDbKey>();

            lstKeysElements.AddRange(dicConcernes.Keys);
            int nSizePaquet = 100;

            for (int nPaquet = 0; nPaquet < lstKeysElements.Count; nPaquet += nSizePaquet)
            {
                int           nMax = Math.Min(nPaquet + nSizePaquet, lstKeysElements.Count);
                StringBuilder bl   = new StringBuilder();
                for (int nId = 0; nId < nMax; nId++)
                {
                    bl.Append(lstKeysElements[nId]);
                    bl.Append(',');
                }
                if (bl.Length > 0)
                {
                    bl.Remove(bl.Length - 1, 1);
                    //Charge tous les Liens d'alarme pour les éléments
                    CListeObjetsDonnees lstAlarmes = new CListeObjetsDonnees(m_contexteDonnee, typeof(CAlarme));
                    lstAlarmes.Filtre = new CFiltreData(strChampDansAlarme + " in (" +
                                                        bl.ToString() + ") and " +
                                                        CAlarme.c_champDateFin + " is null");

                    lstAlarmes.AssureLectureFaite();

                    //CMemoryDb database =  new CMemoryDb();

                    foreach (CAlarme alarme in lstAlarmes)
                    {
                        if (alarme != null && alarme.AlarmesFilles.Count == 0)
                        {
                            CLocalAlarme locAlrm = alarme.GetLocalAlarme(m_database, true);
                            //m_dicAlarmes[info.IdSpvEvtAlarme] = info;
                            m_dicAlarmes[locAlrm.Id] = locAlrm;
                            StartAlarme(locAlrm);
                        }
                    }

                    /*
                     * foreach ( CSpvLienAccesAlarme lienAlarme in lstAlarmes )
                     * {
                     *  CSpvAcces acces = lienAlarme.AccesAlarmeOne;
                     *  if ( acces != null )
                     *  {
                     *      int? nId = acces.Row[strChampDansAcces] as int?;
                     *      if (nId != null)
                     *      {
                     *          List<CInfoElementDeSchemaSupervise> lst = null;
                     *          if (dicConcernes.TryGetValue(nId.Value, out lst))
                     *          {
                     *              foreach (CInfoElementDeSchemaSupervise info in lst)
                     *              {
                     *                  info.SetConcerneParAlarmes();
                     *                  if (lienAlarme.MaskAdminDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now)
                     *                  {
                     *                      if (lienAlarme.MaskAdminDateMax == null || lienAlarme.MaskAdminDateMax < DateTime.Now)
                     *                          info.SetMasquageAdministrateur(lienAlarme.Id, true);
                     *                  }
                     *                  if (lienAlarme.MaskBriDateMin != null && lienAlarme.MaskBriDateMin > DateTime.Now)
                     *                      if (lienAlarme.MaskBriDateMax == null || lienAlarme.MaskBriDateMax < DateTime.Now)
                     *                          info.SetMasquageBrigadier(lienAlarme.Id, true);
                     *              }
                     *          }
                     *      }
                     *  }
                     * }*/
                    /*if (m_infoSchemaRacine != null)
                     * {
                     *  List<CInfoElementDeSchemaSupervise> lstTmp = new List<CInfoElementDeSchemaSupervise>();
                     *  m_infoSchemaRacine.RecalculeToutLeMasquage(lstTmp);
                     * }*/
                }
            }
        }