Ejemplo n.º 1
0
        public CResultAErreur UpdateEOs(CReferenceObjetDonnee referenceObject)
        {
            CResultAErreur result = CResultAErreur.True;

            using (CContexteDonnee contexte = new CContexteDonnee(IdSession, true, false))
            {
                CObjetDonnee objet = referenceObject.GetObjet(contexte);
                if (objet is IElementAEO)
                {
                    result = CUtilElementAEO.UpdateEOSInCurrentContext((IElementAEO)objet);
                    if (result)
                    {
                        result = contexte.SaveAll(true);
                    }
                    return(result);
                }
            }
            return(result);
        }
Ejemplo n.º 2
0
        //////////////////////////////////////////////////////////////////////
        public override CResultAErreur TraitementAvantSauvegarde(CContexteDonnee contexte)
        {
            CResultAErreur result = base.TraitementAvantSauvegarde(contexte);

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

            DataTable table = contexte.Tables[GetNomTable()];

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

            ArrayList lst = new ArrayList(table.Rows);
            Dictionary <IElementAEO, bool> tableElementsToUpdate = new Dictionary <IElementAEO, bool>();

            foreach (DataRow row in lst)
            {
                if (
                    row.RowState == DataRowState.Modified ||
                    row.RowState == DataRowState.Added)
                {
                    CRelationElement_EO      rel   = new CRelationElement_EO(row);
                    CObjetDonneeAIdNumerique objet = rel.ElementLie;
                    if (objet != null)
                    {
                        if (objet is IElementAEO)
                        {
                            tableElementsToUpdate[(IElementAEO)objet] = true;

                            // Vérifie les Exception de Type pour le Type d'EO
                            if (rel.EntiteOrganisationnelle != null &&
                                rel.EntiteOrganisationnelle.TypeEntite != null &&
                                rel.EntiteOrganisationnelle.TypeEntite.HasExceptionForType(objet.GetType()))
                            {
                                result.EmpileErreur(I.T("@1 cannot be affected to Organizational Entity @2. There is an Exception on this Type|10011",
                                                        ((IElementAEO)objet).DescriptionElement, rel.EntiteOrganisationnelle.Libelle));
                                return(result);
                            }
                        }
                    }
                }
                else if (row.RowState == DataRowState.Deleted)
                {
                    CRelationElement_EO rel = new CRelationElement_EO(row);
                    rel.VersionToReturn = DataRowVersion.Original;
                    CObjetDonneeAIdNumerique objet = rel.ElementLie;
                    if (objet != null && objet.IsValide() && objet is IElementAEO && (!(rel.Row[CSc2iDataConst.c_champIsDeleted] is bool) || (bool)rel.Row[CSc2iDataConst.c_champIsDeleted] != true))
                    {
                        tableElementsToUpdate[(IElementAEO)objet] = true;
                    }
                }
            }

            //Met à jour les eos des éléments qui ont bougé
            foreach (IElementAEO element in tableElementsToUpdate.Keys)
            {
                result = CUtilElementAEO.UpdateEOSInCurrentContext(element);
                if (!result)
                {
                    return(result);
                }
            }
            return(result);
        }
Ejemplo n.º 3
0
        //----------------------------------------------------------------
        /// <summary>
        /// Controle si les donnateurs d'EO ont changé, si oui,
        /// répercute les EOS du donnateur sur l'élément et ses héritiers
        /// </summary>
        /// <param name="elt"></param>
        /// <returns></returns>
        public static CResultAErreur OnChangementElementAEO(IElementAEO elt)
        {
            CResultAErreur result = CResultAErreur.True;

            if (elt == null)
            {
                return(result);
            }
            CObjetDonneeAIdNumerique objet = (CObjetDonneeAIdNumerique)elt;
            Hashtable tableParentsOld      = new Hashtable();
            Hashtable tableParentsNew      = new Hashtable();

            bool bHasChange = objet.Row.RowState == DataRowState.Added;

            if (!bHasChange || objet.Row.RowState == DataRowState.Modified)
            {
                DataRowVersion version = objet.VersionToReturn;
                objet.VersionToReturn = DataRowVersion.Original;
                IElementAEO[] donnateurs = elt.DonnateursEO;
                if (donnateurs != null)
                {
                    foreach (IElementAEO donnateur in donnateurs)
                    {
                        if (donnateur != null)
                        {
                            tableParentsOld[donnateur] = true;
                        }
                    }
                }

                objet.VersionToReturn = version;
                donnateurs            = elt.DonnateursEO;
                if (donnateurs != null)
                {
                    foreach (IElementAEO donnateur in donnateurs)
                    {
                        if (donnateur != null)
                        {
                            if (!tableParentsOld.Contains(donnateur))
                            {
                                bHasChange = true;
                                break;
                            }
                            tableParentsNew[donnateur] = true;
                        }
                    }
                }
                //Vérifie que les anciens sont tous là
                foreach (IElementAEO old in tableParentsOld.Keys)
                {
                    if (!tableParentsNew.Contains(old))
                    {
                        bHasChange = true;
                        break;
                    }
                }
            }
            if (bHasChange)
            {
                //On est bon pour retravailler l'élément et tous ses fils
                CUtilElementAEO.UpdateEOSInCurrentContext(elt);
            }


            return(result);
        }
Ejemplo n.º 4
0
 //----------------------------------------------------------------
 public CResultAErreur SetAllOrganizationalEntities(IElementAEO elt, int[] nIdsOE)
 {
     return(CUtilElementAEO.SetAllOrganizationalEntities(elt, nIdsOE));
 }
Ejemplo n.º 5
0
 //---------------------------------------------------------------------------------
 public CResultAErreur SupprimerEO(IElementAEO elt, int nIdEO)
 {
     return(CUtilElementAEO.SupprimerEO(elt, nIdEO));
 }
Ejemplo n.º 6
0
 //---------------------------------------------------------------------------------
 public void CompleteRestriction(IElementAEO elt, CRestrictionUtilisateurSurType restriction)
 {
     CUtilElementAEO.CompleteRestriction(elt, restriction);
 }
Ejemplo n.º 7
0
 //---------------------------------------------------------------------------------
 public CResultAErreur AjouterEO(IElementAEO elt, int nIdEO)
 {
     return(CUtilElementAEO.AjouterEO(elt, nIdEO));
 }
Ejemplo n.º 8
0
        //---------------------------------------------
        /// <summary>
        /// Retourne le filtre à appliquer à un élément pour obtenir tous les éléments
        /// ayant en commun les types d'EO demandés
        /// </summary>
        /// <param name="element"></param>
        /// <param name="typesCommuns"></param>
        /// <param name="bFillesSeulement">Indique que seules le EOS = ou filles sont prises en compte (true),
        /// ou seules les EOs parentes (false)</param>
        /// <returns></returns>
        public static CFiltreData GetFiltrePourTypeEosCommuns(IElementAEO element, List <COptionCorrespondanceEO> typesCommuns)
        {
            CFiltreData filtre = null;

            Dictionary <COptionCorrespondanceEO, Dictionary <string, EModeComparaisonEO> > tableEOS = new Dictionary <COptionCorrespondanceEO, Dictionary <string, EModeComparaisonEO> >();

            foreach (CEntiteOrganisationnelle eo in CUtilElementAEO.GetToutesEOs(element))
            {
                foreach (COptionCorrespondanceEO option in typesCommuns)
                {
                    Dictionary <string, EModeComparaisonEO> dicoOption = null;
                    if (tableEOS.ContainsKey(option))
                    {
                        dicoOption = tableEOS[option];
                    }
                    else
                    {
                        dicoOption       = new Dictionary <string, EModeComparaisonEO>();
                        tableEOS[option] = dicoOption;
                    }

                    switch (option.ModeComparaison)
                    {
                    case EModeComparaisonEO.FillesUniquement:
                        if (eo.TypeEntite == option.TypeEO)
                        {
                            dicoOption[eo.CodeSystemeComplet] = option.ModeComparaison;
                        }
                        else if (eo.TypeEntite.IsChildOf(option.TypeEO))
                        {
                            dicoOption[eo.GetParent(option.TypeEO).CodeSystemeComplet] = option.ModeComparaison;
                        }
                        else if (option.TypeEO.IsChildOf(eo.TypeEntite))
                        {
                            foreach (CEntiteOrganisationnelle eoFille in eo.GetChilds(option.TypeEO))
                            {
                                dicoOption[eoFille.CodeSystemeComplet] = option.ModeComparaison;
                            }
                        }
                        break;

                    case EModeComparaisonEO.ParentsUniquement:
                    case EModeComparaisonEO.BrancheComplete:
                        CEntiteOrganisationnelle eoTmp = eo;
                        string strLib = option.TypeEO.Libelle;
                        while (eoTmp.TypeEntite.IsChildOf(option.TypeEO) && !eoTmp.TypeEntite.Equals(option.TypeEO))
                        {
                            eoTmp = eoTmp.EntiteParente;
                        }
                        strLib = eoTmp.Libelle;
                        if (eoTmp != null && eoTmp.TypeEntite.Equals(option.TypeEO))
                        {
                            while (eoTmp != null)
                            {
                                dicoOption[eoTmp.CodeSystemeComplet] = option.ModeComparaison;
                                eoTmp = eoTmp.EntiteParente;
                            }
                        }
                        break;

                    case EModeComparaisonEO.Egalite:
                        if (eo.TypeEntite == option.TypeEO)
                        {
                            dicoOption[eo.CodeSystemeComplet] = option.ModeComparaison;
                        }
                        break;
                    }
                }
            }
            if (tableEOS.Count > 0)
            {
                string strFiltreEO = "";
                int    nIndex      = 1;
                filtre = new CFiltreData("");
                foreach (Dictionary <string, EModeComparaisonEO> dico in tableEOS.Values)
                {
                    if (dico.Count != 0)
                    {
                        strFiltreEO += "(";
                        foreach (KeyValuePair <string, EModeComparaisonEO> entry in dico)
                        {
                            string             strCodeEO = entry.Key;
                            EModeComparaisonEO mode      = entry.Value;
                            strFiltreEO += CUtilElementAEO.c_champEO + " like @" + (nIndex++) + " or ";
                            switch (mode)
                            {
                            case EModeComparaisonEO.FillesUniquement:
                                filtre.Parametres.Add("%~" + strCodeEO + "%");
                                break;

                            case EModeComparaisonEO.ParentsUniquement:
                            case EModeComparaisonEO.Egalite:
                                filtre.Parametres.Add("%~" + strCodeEO + "~%");
                                break;

                            case EModeComparaisonEO.BrancheComplete:
                                filtre.Parametres.Add("%~" + strCodeEO + "%");
                                break;
                            }
                        }
                        strFiltreEO = strFiltreEO.Substring(0, strFiltreEO.Length - 4) + ") and ";
                    }
                }
                if (strFiltreEO.Length > 0)
                {
                    strFiltreEO   = strFiltreEO.Substring(0, strFiltreEO.Length - 5);
                    filtre.Filtre = strFiltreEO;
                }
            }
            return(filtre);
        }