public IEnumerable <IElementDeSchemaReseau> GetSupportingElementsSortedFrom(IElementDeSchemaReseau element) { CListeObjetsDonnees lstSupports = LiensSupportants; HashSet <int> setFaits = new HashSet <int>(); List <IElementDeSchemaReseau> lstElements = new List <IElementDeSchemaReseau>(); if (element != null) { List <CLienReseau> lstLiens = new List <CLienReseau>(); FillLiensSupportFrom(element, lstLiens, setFaits, lstSupports.ToList <CLienReseau>()); lstElements.Add(element); foreach (CLienReseau lien in lstLiens) { if (lien.Element1.Equals(element)) { lstElements.Add(lien.Element2); } else { lstElements.Add(lien.Element1); } } } return(lstElements); }
public IEnumerable <CLienReseau> GetSupportingSortedFrom(IElementDeSchemaReseau element) { CListeObjetsDonnees lstSupports = LiensSupportants; HashSet <int> setFaits = new HashSet <int>(); List <CLienReseau> lstLiens = new List <CLienReseau>(); FillLiensSupportFrom(element, lstLiens, setFaits, lstSupports.ToList <CLienReseau>()); return(lstLiens.AsReadOnly()); }
public void Init(IEnumerable <CCategorieGED> lstCategories) { m_panelCategories.SuspendDrawing(); if (lstCategories == null || lstCategories.Count() == 0) { List <CCategorieGED> lstTmp = new List <CCategorieGED>(); CListeObjetsDonnees lst = new CListeObjetsDonnees(CSc2iWin32DataClient.ContexteCourant, typeof(CCategorieGED)); lstTmp = lst.ToList <CCategorieGED>(); lstCategories = lstTmp; } //Prépare l'arborescence List <CCategorieGED> lstOrdonnee = new List <CCategorieGED>(); lstOrdonnee.AddRange(lstCategories); lstOrdonnee.Sort((x, y) => x.CodeSystemeComplet.CompareTo(y.CodeSystemeComplet)); HashSet <CCategorieGED> setFaites = new HashSet <CCategorieGED>(); foreach (CCategorieGED cat in lstOrdonnee) { AddCat(cat, setFaites, lstOrdonnee, 0); } }
// ///////////////////////////////////////////////////////// /// <summary> /// Le data du result contient un IBaseGantt /// </summary> /// <returns></returns> public static CResultAErreur CreateGantt( CMetaProjet metaProjet, CParametreNiveauArbreGanttGroupe groupeRacine, CFiltreData filtreElements) { CResultAErreur result = CResultAErreur.True; if (metaProjet == null) return result; CElementDeGanttMetaProjet elementRacine = new CElementDeGanttMetaProjet(null, metaProjet); if (!result) return result; List<CProjet> lstProjets = new List<CProjet>(); bool bLectureDansContexteCourant = false; //S'il y a des éléments modifiés, ajoutés ou supprimés dans //les relations, charge manuellement DataTable table = metaProjet.ContexteDonnee.GetTableSafe(CRelationMetaProjet_Projet.c_nomTable); if ( table != null ) { if ( table.Select ( "", "", DataViewRowState.Added | DataViewRowState.Deleted | DataViewRowState.ModifiedCurrent ).Length > 0 ) { bLectureDansContexteCourant = true; //Il y a des modifs, on ne peut donc pas appliquer le filtre, //et on doit aller chercher les projets manuellement foreach ( CRelationMetaProjet_Projet rel in metaProjet.RelationsProjets ) { List<CProjet> lstTmp = new List<CProjet>(); lstTmp.Add ( rel.Projet ); while ( lstTmp.Count > 0 ) { List<CProjet> lstSuivante = new List<CProjet>(); foreach ( CProjet prj in lstTmp ) { lstProjets.Add ( prj ); lstSuivante.AddRange ( prj.ProjetsFils.ToList<CProjet>()); } lstTmp = lstSuivante; } } } } if (!bLectureDansContexteCourant) { CFiltreData filtre = result.Data as CFiltreData; filtre = CFiltreData.GetAndFiltre(filtreElements, new CFiltreDataAvance( CProjet.c_nomTable, CRelationMetaProjet_Projet.c_nomTable + "." + CMetaProjet.c_champId + "=@1", metaProjet.Id)); filtre.IntegrerFilsHierarchiques = !metaProjet.HideChildProjects; CListeObjetsDonnees lstObjetProjets = new CListeObjetsDonnees(metaProjet.ContexteDonnee, typeof(CProjet), filtre); lstObjetProjets.PreserveChanges = true; lstObjetProjets.ModeSansTri = true; lstProjets.AddRange(lstObjetProjets.ToList<CProjet>()); if ( metaProjet.HideChildProjects ) lstObjetProjets.ReadDependances("LiensEnTantQueProjetA.ProjetB", "LiensEnTantQueProjetB.ProjetA", "ContraintesPropres", "AnomaliesDuProjet"); else lstObjetProjets.ReadDependances("ProjetsFils", "LiensEnTantQueProjetA.ProjetB", "LiensEnTantQueProjetB.ProjetA", "ContraintesPropres", "AnomaliesDuProjet"); CUtilElementAChamps.ReadChampsCustom(lstObjetProjets); } CContexteDonnee contexteDeTravail = metaProjet.ContexteDonnee; return PrepareGantt(groupeRacine, result, elementRacine, lstProjets, contexteDeTravail); }
// ///////////////////////////////////////////////////////// /// <summary> /// Le data du result contient un IBaseGantt /// </summary> /// <returns></returns> public static CResultAErreur CreateGantt ( CProjet projet, CParametreNiveauArbreGanttGroupe groupeRacine, CFiltreData filtreElements ) { CResultAErreur result = CResultAErreur.True; if (projet == null) return result; CElementDeGanttProjet elementRacine = new CElementDeGanttProjet(null, projet); if (!result) return result; List<CProjet> lstProjets = new List<CProjet>(); if (!projet.IsNew())//Si le projet est nouveau, on ne peut pas filtrer //car les éléments ne sont pas encore en base { CFiltreData filtre = result.Data as CFiltreData; filtre = CFiltreData.GetAndFiltre(filtreElements, new CFiltreData(CProjet.c_champCodeSystemeComplet + " like @1 and " + CProjet.c_champId + "<>@2", projet.CodeSystemeComplet + "%", projet.Id)); CListeObjetsDonnees lstObjetProjets = new CListeObjetsDonnees(projet.ContexteDonnee, typeof(CProjet), filtre); lstObjetProjets.PreserveChanges = true; lstObjetProjets.ModeSansTri = true; lstProjets.AddRange(lstObjetProjets.ToList<CProjet>()); lstObjetProjets.ReadDependances("ProjetsFils","LiensEnTantQueProjetA", "LiensEnTantQueProjetB", "ContraintesPropres", "AnomaliesDuProjet"); CUtilElementAChamps.ReadChampsCustom(lstObjetProjets); } //Il faut ajouter les projets qui ne sont pas encore en base et qui n'ont donc pas de code system List<CProjet> lstALire = new List<CProjet>(); lstALire.Add(projet); DataRelation relation = null; foreach ( DataRelation rel in projet.ContexteDonnee.Tables[CProjet.c_nomTable].ChildRelations ) { if ( rel.ChildTable.TableName == CProjet.c_nomTable ) { relation = rel; break; } } while (lstALire.Count > 0 && relation != null) { List<CProjet> prochaineGeneration = new List<CProjet>(); foreach (CProjet test in lstALire) { DataRow[] rowsDeps = test.Row.Row.GetChildRows(relation); foreach (DataRow row in rowsDeps) { if (row.RowState != DataRowState.Deleted) { CProjet prj = new CProjet(row); if (prj.IsNew() && !lstProjets.Contains(prj) ) { lstProjets.Add(prj); } prochaineGeneration.Add(prj); } } } lstALire = prochaineGeneration; } //Comme on est passé par un filtre Avancé, les nouveaux éléments ne sont //pas dans la liste. On les ajoute donc ! //Vérifie qu'il y a des éléments dont l'id est négatif CListeObjetsDonnees lstTmp = new CListeObjetsDonnees(projet.ContexteDonnee, typeof(CProjet)); lstTmp.Filtre = new CFiltreData(CProjet.c_champId + "<@1", 0); lstTmp.InterditLectureInDB = true; if (lstTmp.Count > 0)//Il y a des projets tous neufs dans le contexte { foreach (CProjet projetTmp in new ArrayList(lstProjets)) { //N'utilise pas ProjetsFils pour ne pas lire dans la base CListeObjetsDonnees lstFils = new CListeObjetsDonnees(projet.ContexteDonnee, typeof(CProjet), new CFiltreData(CProjet.c_champIdParent + "=@1", projetTmp.Id)); lstFils.InterditLectureInDB = true; lstFils.Filtre = new CFiltreData(CProjet.c_champId + "<0"); foreach (CProjet projetFils in lstFils) if (!lstProjets.Contains(projetFils)) lstProjets.Add(projetFils); } //Les nouveaux sous projet du projet principal doivent également être ajoutés CListeObjetsDonnees lstFilsPrincipal = projet.ProjetsFils; lstFilsPrincipal.Filtre = new CFiltreData(CProjet.c_champId + "<0"); foreach (CProjet projetFils in lstFilsPrincipal) if (!lstProjets.Contains(projetFils)) lstProjets.Add(projetFils); } CContexteDonnee contexteDeTravail = projet.ContexteDonnee; return PrepareGantt(groupeRacine,result, elementRacine, lstProjets, contexteDeTravail); }
//--------------------------------------------- private void FillListeInterventionsAPlanifier() { m_timerRefreshInterventionsPlanifiees.Stop(); IElementAIntervention element = m_controlePlanning.ElementAInterventionSelectionne; if (element == null) { m_chkIntersSurSiteSelectionné.Visible = false; } else { m_chkIntersSurSiteSelectionné.Text = I.T("Filter on @1|20658", element.DescriptionElement); } m_panelTachesPrePlanifiees.Visible = true; DateTime dateDebut = m_controlePlanning.DateDebut.Date; DateTime dateFin = m_controlePlanning.DateFin.Date.AddDays(1); m_lblDatesListe.Text = I.T("from @1 to @2|20652", dateDebut.ToShortDateString(), dateFin.ToShortDateString()); if (m_listeEntitesSelectionnee != null) { m_chkIntersSurListe.Text = m_listeEntitesSelectionnee.Libelle; } if (m_filtreDynamicSelectionnee != null) { m_chkIntersFiltre.Text = m_filtreDynamicSelectionnee.Libelle; } CListeObjetsDonnees listeInters = new CListeObjetsDonnees(m_contexteDonnee, typeof(CIntervention)); listeInters.PreserveChanges = true; CFiltreData filtre = new CFiltreDataAvance(CIntervention.c_nomTable, "(" + CIntervention.c_champDateDebutPreplanifiee + "<@1 and " + CIntervention.c_champDateFinPrePlanifiee + ">@2) or (" + CFractionIntervention.c_nomTable + "." + CFractionIntervention.c_champDateDebutPlanifie + "<@1 and " + CFractionIntervention.c_nomTable + "." + CFractionIntervention.c_champDateFinPlanifiee + ">@2)", dateFin, dateDebut); if (m_chkIntersSurSiteSelectionné.Checked && element is CSite) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreData(CIntervention.c_champIdElementLie + "=@1", element.Id)); } if (m_chkIntersNonPlanifiées.Checked) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreDataAvance(CIntervention.c_nomTable, "HasNo(" + CFractionIntervention.c_nomTable + "." + CFractionIntervention.c_champId + ")")); } if (m_chkIntersNonAffectées.Checked) { filtre = CFiltreData.GetAndFiltre(filtre, new CFiltreDataAvance(CIntervention.c_nomTable, "Hasno(" + CIntervention_Intervenant.c_nomTable + "." + CIntervention_Intervenant.c_champId + ")")); } listeInters.Filtre = filtre; if (m_setIdsInterventionsVisiblesCalculéDefiltreEtListe == null) { CalculeSetIdsInterventionsVisibles(); } List <CIntervention> lstFiltree = listeInters.ToList <CIntervention>(); foreach (CIntervention inter in listeInters.ToArrayList()) { if (m_chkIntersNonPlanifiées.Checked && inter.Fractions.Count > 0) { lstFiltree.Remove(inter); } if (m_chkIntersNonAffectées.Checked && inter.RelationsIntervenants.Count > 0) { lstFiltree.Remove(inter); } if (inter.Id >= 0 && m_setIdsInterventionsVisiblesCalculéDefiltreEtListe != null && !m_setIdsInterventionsVisiblesCalculéDefiltreEtListe.Contains(inter.Id)) { lstFiltree.Remove(inter); } } m_wndListeInterAPlanifier.ListeSource = lstFiltree; m_wndListeInterAPlanifier.Refresh(); }
//////////////////////////////////////////////////////////// public static CResultAErreur CanDelete(CListeObjetsDonnees liste) { CResultAErreur result = CResultAErreur.True; if (liste.Count == 0) { return(result); } bool bPasObjetAIdNumeriqueAuto = false; foreach (CObjetDonnee objet in liste) { if (!(objet is CObjetDonneeAIdNumerique)) { bPasObjetAIdNumeriqueAuto = true; result = objet.CanDelete(); } else { result = ((CObjetDonneeAIdNumerique)objet).MyCanDelete(); } if (!result) { return(result); } } if (bPasObjetAIdNumeriqueAuto) { return(result); } Type typeElements = liste.TypeObjets; string strListeIds = ""; int nCount = liste.Count; int nTailleParBloc = 500; string strNomTable = CContexteDonnee.GetNomTableForType(liste.TypeObjets); //Copie de la liste, pour sécuriser le parcours List <CObjetDonneeAIdNumerique> lstElements = liste.ToList <CObjetDonneeAIdNumerique>(); //Travaille par bloc de 500 enregistrements pour les contrôles for (int nBloc = 0; nBloc < nCount; nBloc += nTailleParBloc) { StringBuilder bl = new StringBuilder(); int nMin = Math.Min(nBloc + nTailleParBloc, nCount); //Liste des éléments du bloc en cours for (int nElement = nBloc; nElement < nMin; nElement++) { bl.Append(lstElements[nElement].Id); bl.Append(','); } if (bl.Length > 0) { bl.Remove(bl.Length - 1, 1); //Liste des objets du bloc en cours CListeObjetsDonnees listePartielle = new CListeObjetsDonnees(liste.ContexteDonnee, liste.TypeObjets, false); listePartielle.Filtre = new CFiltreData( liste.ContexteDonnee.GetTableSafe(strNomTable).PrimaryKey[0].ColumnName + " in (" + bl.ToString() + ")");; listePartielle.InterditLectureInDB = true; //Pas besoin de lire car les éléments sont déjà dans le contexte de données listePartielle.Filtre.IntegrerLesElementsSupprimes = liste.Filtre != null? liste.Filtre.IntegrerLesElementsSupprimes: (liste.FiltrePrincipal != null?liste.FiltrePrincipal.IntegrerLesElementsSupprimes:false); listePartielle.Filtre.IgnorerVersionDeContexte = liste.Filtre != null ? liste.Filtre.IgnorerVersionDeContexte: (liste.FiltrePrincipal != null ? liste.FiltrePrincipal.IgnorerVersionDeContexte : false); strListeIds = bl.ToString(); foreach (CInfoRelation relation in CContexteDonnee.GetListeRelationsTable(strNomTable)) { if (relation.TableParente == strNomTable) //Relation fille { if (!relation.Composition) //Ce n'est pas une composition, il ne faut pas qu'il y ait de fils { if (!relation.PasserLesFilsANullLorsDeLaSuppression) //Sinon, ce n'est pas grave ! { IObjetServeur objServeur = liste.ContexteDonnee.GetTableLoader(relation.TableFille); //Ceux pour lesquels les dépendances sont chargés n'ont pas besoin de regarder la base StringBuilder strIdsAVoirDansLaBase = new StringBuilder(); DataRelation dataRel = null; foreach (DataRelation childRel in liste.ContexteDonnee.GetTableSafe(relation.TableParente).ChildRelations) { bool bCestElle = false; if (childRel.ChildTable.TableName == relation.TableFille) { if (childRel.ChildColumns.Length == relation.ChampsFille.Length) { bCestElle = true; for (int nCol = 0; nCol < childRel.ChildColumns.Length; nCol++) { if (childRel.ChildColumns[nCol].ColumnName != relation.ChampsFille[nCol]) { bCestElle = false; break; } } } } if (bCestElle) { dataRel = childRel; break; } } if (dataRel != null) { foreach (CObjetDonneeAIdNumerique objetTmp in listePartielle) { string strFKName = objetTmp.ContexteDonnee.GetForeignKeyName(dataRel); if (objetTmp.IsDependanceChargee(strFKName)) { DataRow[] rowsFilles = objetTmp.Row.Row.GetChildRows(dataRel); if (rowsFilles.Length > 0) { result.EmpileErreur(I.T("Cannot delete element @1, @2 elements (@3) are linked|190", objetTmp.DescriptionElement, rowsFilles.Length.ToString(), relation.TableFille)); return(result); } } else { strIdsAVoirDansLaBase.Append(objetTmp.Id); strIdsAVoirDansLaBase.Append(','); } } if (strIdsAVoirDansLaBase.Length > 0) { strIdsAVoirDansLaBase.Remove(strIdsAVoirDansLaBase.Length - 1, 1); } } else { strIdsAVoirDansLaBase.Append(strListeIds); } if (strIdsAVoirDansLaBase.Length > 0) { CFiltreData filtre = new CFiltreData(relation.ChampsFille[0] + " in (" + strIdsAVoirDansLaBase.ToString() + ")"); int nNb = objServeur.CountRecords(relation.TableFille, filtre); if (nNb != 0) { Type tp = CContexteDonnee.GetTypeForTable(relation.TableFille); result.EmpileErreur(I.T("Cannot delete '@1' elements because '@2' elements are dependent|160", DynamicClassAttribute.GetNomConvivial(typeElements), DynamicClassAttribute.GetNomConvivial(tp))); return(result); } } } } else //C'est une composition { CListeObjetsDonnees listeDep = listePartielle.GetDependancesFilles(relation, liste.Filtre != null && liste.Filtre.IntegrerLesElementsSupprimes || liste.FiltrePrincipal != null && liste.FiltrePrincipal.IntegrerLesElementsSupprimes); result = CanDelete(listeDep); if (!result) { return(result); } } } } //Peut-on supprimer les relationsTypeId foreach (RelationTypeIdAttribute relation in CContexteDonnee.RelationsTypeIds) { Type tpLiens = CContexteDonnee.GetTypeForTable(relation.TableFille); if (relation.AppliquerContrainteIntegrite && !relation.CanDeleteToujours && relation.IsAppliqueToType(typeElements)) { CListeObjetsDonnees listeTypeId = new CListeObjetsDonnees(liste.ContexteDonnee, tpLiens, false); CFiltreData filtre = new CFiltreData( relation.ChampType + "=@1 and " + relation.ChampId + " in (" + strListeIds + ")", typeElements.ToString()); listeTypeId.Filtre = filtre; if (relation.Composition) { result = CanDelete(listeTypeId); if (!result) { return(result); } } else { int nNb = listeTypeId.CountNoLoad; if (nNb != 0) { Type tp = CContexteDonnee.GetTypeForTable(relation.TableFille); result.EmpileErreur(I.T("Cannot delete the required elements because elements @1 exist in database|161", DynamicClassAttribute.GetNomConvivial(tpLiens))); return(result); } } } } if (IsUtiliseDansVersionFuture(liste, strListeIds)) { result.EmpileErreur(I.T("Cannot delete these elements because they will be used in future versions|187")); return(result); } } } return(result); }
public void OnGereDemasquage(object state) { if (m_bIsDemasquageEnCours) { return; } m_bIsDemasquageEnCours = true; try { lock (typeof(CLockerTraitementAlarme)) { CResultAErreur result = AssureSessionEtContexte(); if (!result) { return; } CListeObjetsDonnees lstParametres = new CListeObjetsDonnees(m_contexteDonnee, typeof(CParametrageFiltrageAlarmes)); lstParametres.Filtre = new CFiltreData( CParametrageFiltrageAlarmes.c_champDateDebutValidite + "<=@1 and " + CParametrageFiltrageAlarmes.c_champDateFinValidite + ">=@2", DateTime.Now, DateTime.Now.AddDays(-1).AddHours(-2)); List <CParametrageFiltrageAlarmes> lst = lstParametres.ToList <CParametrageFiltrageAlarmes>(); HashSet <CAlarme> lstAlarmesARecalculer = new HashSet <CAlarme>(); foreach (CParametrageFiltrageAlarmes parametre in lst) { bool bOldIsApplicable = parametre.IsAppliquableEnCeMoment; parametre.RecalcIsApplicableEnCeMoment(); if (bOldIsApplicable != parametre.IsAppliquableEnCeMoment && !parametre.IsAppliquableEnCeMoment) { //Il faut démasquer CListeObjetsDonnees lstAlarmes = new CListeObjetsDonnees(m_contexteDonnee, typeof(CAlarme)); lstAlarmes.Filtre = new CFiltreData(CAlarme.c_champIdMasquagePropre + "=@1 and " + CAlarme.c_champDateFin + " is null", parametre.Id); foreach (CAlarme alrm in lstAlarmes) { alrm.MasquagePropre = null; lstAlarmesARecalculer.Add(alrm); } } } lstParametres.Filtre = new CFiltreData( CParametrageFiltrageAlarmes.c_champDateDebutValidite + "<=@1 and " + CParametrageFiltrageAlarmes.c_champDateFinValidite + ">=@2", DateTime.Now, DateTime.Now.AddDays(-1)); lstParametres.PreserveChanges = true; IEnumerable <IParametrageFiltrageAlarmes> parametres = lstParametres.ToList <IParametrageFiltrageAlarmes>(); foreach (CAlarme alarme in lstAlarmesARecalculer) { CParametrageFiltrageAlarmes p = CUtilMasquageAlarmes.GetParametreAAppliquer(alarme, DateTime.Now, parametres) as CParametrageFiltrageAlarmes; if (p != null) { alarme.MasquagePropre = p; } } result = m_contexteDonnee.SaveAll(true); } } catch (Exception e) { } finally { m_bIsDemasquageEnCours = false; } }