//------------------------------------------------------------------------------------ public CFiltreDataAvance GetFiltreForRechercheRessourcesSurAttributs() { //Crée le filtre sur les types de ressource qui lèvent le type de contrainte CFiltreDataAvance filtreFinal = new CFiltreDataAvance( CRessourceMaterielle.c_nomTable, CTypeRessource.c_nomTable + "." + CRelationTypeContrainte_TypeRessource.c_nomTable + "." + CTypeContrainte.c_champId + "=@1", TypeContrainte.Id); CFiltreData filtreAttributs = GetFiltreSurAttributsRessource(); if (filtreAttributs != null && !(filtreAttributs is CFiltreDataAvance)) { filtreAttributs = CFiltreDataAvance.ConvertFiltreToFiltreAvance(CAttributRessource.c_nomTable, filtreAttributs); } if (filtreAttributs != null) { CFiltreDataAvance filtreAv = (CFiltreDataAvance)filtreAttributs; filtreAv.ChangeTableDeBase(CRessourceMaterielle.c_nomTable, CAttributRessource.c_nomTable); } filtreFinal = (CFiltreDataAvance)CFiltreData.GetAndFiltre(filtreAttributs, filtreFinal); return(filtreFinal); }
//---------------------------------------------------------------------------- private void InitListesPlannifieurs(bool bMajChamps) { CFiltreData filtrePlanifieurs = new CFiltreDataAvance(CActeur.c_nomTable, "HAS(" + CDonneesActeurUtilisateur.c_nomTable + "." + CDonneesActeurUtilisateur.c_champId + ")"); CFiltreData filtrePrePlanifieurs = filtrePlanifieurs.GetClone(); bool bAppliquerProfils = true; if (bAppliquerProfils) { CTypeIntervention typeIntervention = (CTypeIntervention)m_cmbTypeIntervention.ElementSelectionne; if (typeIntervention != null && typeIntervention.ProfilPlanifieur != null) { CListeObjetsDonnees lstTmp = typeIntervention.ProfilPlanifieur.GetElementsForSource(Intervention, null); CFiltreDataAvance filtreTmp = CFiltreDataAvance.ConvertFiltreToFiltreAvance(CDonneesActeurUtilisateur.c_nomTable, lstTmp.FiltrePrincipal); filtreTmp.ChangeTableDeBase(CActeur.c_nomTable, CDonneesActeurUtilisateur.c_nomTable); filtrePlanifieurs = CFiltreData.GetAndFiltre(filtrePlanifieurs, filtreTmp); } if (typeIntervention != null && typeIntervention.ProfilPreplanifieur != null) { CListeObjetsDonnees lstTmp = typeIntervention.ProfilPreplanifieur.GetElementsForSource(Intervention, null); CFiltreDataAvance filtreTmp = CFiltreDataAvance.ConvertFiltreToFiltreAvance(CDonneesActeurUtilisateur.c_nomTable, lstTmp.FiltrePrincipal); filtreTmp.ChangeTableDeBase(CActeur.c_nomTable, CDonneesActeurUtilisateur.c_nomTable); filtrePrePlanifieurs = CFiltreData.GetAndFiltre(filtrePrePlanifieurs, filtreTmp); } } m_txtSelectPreplanificateur.InitAvecFiltreDeBase <CActeur>( "IdentiteComplete", filtrePrePlanifieurs, true); m_txtSelectPlanificateur.InitAvecFiltreDeBase <CActeur>( "IdentiteComplete", filtrePlanifieurs, true); }
//------------------------------------------------------------------------ public int[] GetIdsRessourcesLevant(int nIdContrainte, CFiltreDataAvance filtreParam) { Hashtable tblIdsRessourcesLevant = new Hashtable(); using (CContexteDonnee contexteDonnee = new CContexteDonnee(IdSession, true, false)) { CContrainte contrainte = new CContrainte(contexteDonnee); if (!contrainte.ReadIfExists(nIdContrainte)) { throw new Exception(I.T("Constraint Id @1 doesn't exist|197", nIdContrainte.ToString())); } // Liste des ressources levants de façon explicite (Relation directe) CListeObjetsDonnees listeRelationRessourceFiltre = contrainte.RelationRessourceListe; // Applique un filtre prédéfini par l'utilisateur de cette fonction CFiltreDataAvance filtreTmp = null; if (filtreParam != null) { filtreTmp = (CFiltreDataAvance)filtreParam.GetClone(); filtreTmp.ChangeTableDeBase(CRelationContrainte_Ressource.c_nomTable, CRessourceMaterielle.c_nomTable); listeRelationRessourceFiltre.Filtre = filtreTmp; } foreach (CRelationContrainte_Ressource rel in listeRelationRessourceFiltre) { tblIdsRessourcesLevant[rel.Ressource.Id] = true; } if (contrainte.TypeContrainte != null) { // Construit une filtre avancé sur les attributs de la contrainte CFiltreData filtreAttributsRessources = contrainte.GetFiltreForRechercheRessourcesSurAttributs(); // Liste de toutes les resssources de la base CListeObjetsDonnees lstRessources = new CListeObjetsDonnees(contexteDonnee, typeof(CRessourceMaterielle)); // Applique le filtre d'attributs à la liste filtreAttributsRessources = CFiltreData.GetAndFiltre(filtreAttributsRessources, filtreParam); lstRessources.Filtre = filtreAttributsRessources; // On obtient la liste des ressource ayant au moins un attribut en commun avec la Contrainte // Vérifie le résultat de la recherche en fonction des options // Si la ressource doit avoir au moins un des attributs de la contrainte //Toutes les ressources trouvées sont bonnes ! if (!contrainte.TypeContrainte.OptionTousAttributsRessourceLevant) { foreach (CRessourceMaterielle res in lstRessources) { tblIdsRessourcesLevant[res.Id] = true; } } else { CResultAErreur result = lstRessources.ReadDependances("AttributsListe"); if (!result) { throw new CExceptionErreur(result.Erreur); } // Sinon la ressource doit avoir tous les attributs de la contrainte CFiltreData filtreTousLesAttributs = contrainte.GetFiltreSurAttributsRessource(); // Recherche dans la liste des resources possibles foreach (CRessourceMaterielle res in lstRessources) { CListeObjetsDonnees attributsRessource = res.AttributsListe; attributsRessource.InterditLectureInDB = true; attributsRessource.Filtre = filtreTousLesAttributs; string strRessource = res.Libelle; int nNbAttribs = attributsRessource.Count; nNbAttribs = contrainte.AttributsListe.Count; // La ressource doit avoir tous les attributs de la contrainte if (attributsRessource.Count == contrainte.AttributsListe.Count) { tblIdsRessourcesLevant[res.Id] = true; } } } } List <int> lstRetour = new List <int>(); foreach (int nId in tblIdsRessourcesLevant.Keys) { lstRetour.Add(nId); } return(lstRetour.ToArray()); } }