//----------------------------------------------- public CElementDeGanttMetaProjet(IElementDeGantt elementParent, CMetaProjet metaProjet) : base(elementParent) { m_metaProjet = metaProjet; PctAvancement = metaProjet.PctAvancement; Poids = 1; }
public void Init(CMetaProjet metaProjet) { if (metaProjet != m_metaProjet) { DateTime dateDebut = DateTime.Now; dateDebut = metaProjet.DateDebutPlanifiee; m_parametreAffichage.DateDebut = m_parametreAffichage.AddCells(dateDebut, -1); } m_metaProjet = metaProjet; m_projet = null; if (metaProjet != null) { m_contexteDonnee = metaProjet.ContexteDonnee; } CParametreDessinLigneGantt parametreDessinGantt; m_composantSauvegardePreferences.InitFromRegistre(); if (m_parametreDessinLigne != null) { parametreDessinGantt = m_parametreDessinLigne; } else { parametreDessinGantt = CParametreDessinLigneGantt.ParametreParDefaut; } m_parametreAffichage.LineHeight = parametreDessinGantt.HauteurLigne; m_gantt.Visible = false; m_gantt.Parametre = m_parametreAffichage; CFiltreData filtre = m_filtreDeBase; if (m_filtreUser != null) { filtre = CFiltreData.GetAndFiltre(filtre, m_filtreUser); } m_iconeHasFilter.Visible = m_filtreUser != null && m_filtreUser.Filtre != "" && m_filtreUser.Filtre != "1=1"; CResultAErreur result = CParametrageGantt.CreateGantt( metaProjet, m_parametreGroupement == null ? null : m_parametreGroupement.GroupeRacine, filtre); if (result) { m_baseGantt = result.Data as CBaseGantt; m_gantt.Visible = true; m_gantt.Init(m_baseGantt); m_gantt.ParametreDessinLigne = parametreDessinGantt; } m_cmbDisplayMode.Init(typeof(CParametrageGantt), "Libelle", false); if (m_parametreGroupement != null) { m_cmbDisplayMode.ElementSelectionne = m_parametreGroupement; } }
//-------------------------------------------------------- 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); } HashSet <CMetaProjet> lstMetaProjetsARecalculer = new HashSet <CMetaProjet>(); foreach (DataRow row in new ArrayList(table.Rows)) { if (row.RowState == DataRowState.Added || row.RowState == DataRowState.Modified) { CRelationMetaProjet_Projet rel = new CRelationMetaProjet_Projet(row); if (rel != null && rel.MetaProjet != null && rel.MetaProjet.IsValide()) { lstMetaProjetsARecalculer.Add(rel.MetaProjet); } } if (row.RowState == DataRowState.Deleted) { if (row.HasVersion(DataRowVersion.Original)) { CRelationMetaProjet_Projet rel = new CRelationMetaProjet_Projet(row); rel.VersionToReturn = DataRowVersion.Original; try { CMetaProjet meta = rel.MetaProjet; if (meta != null && meta.IsValide()) { lstMetaProjetsARecalculer.Add(meta); } } catch { } } } } foreach (CMetaProjet meta in lstMetaProjetsARecalculer) { meta.UpdateDateDebutPlanifieeFromChilds(false); meta.UpdateDateFinPlanifieeFromChilds(false); meta.CalcProgress(false); } return(result); }
//------------------------------------------------------------------- public override CResultAErreur VerifieDonnees(CObjetDonnee objet) { CResultAErreur result = CResultAErreur.True; try { CMetaProjet proj = (CMetaProjet)objet; if (proj.Libelle == null || proj.Libelle == "") { result.EmpileErreur(I.T("The meta project label cannot be empty|20180")); } } catch (Exception e) { result.EmpileErreur(new CErreurException(e)); } return(result); }
// ///////////////////////////////////////////////////////// /// <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); }
/// ////////////////////////////////////////////////// ///Lance le calcul public static void DoCalc(CElementsProjetARecalculer lstElements) { CResultAErreur result = CResultAErreur.True; CDbKey keyUser = null; //Attend la fin des transactions en cours pour la session principale IDatabaseConnexion cnx = null; do { CSessionClient session = CSessionClient.GetSessionForIdSession(lstElements.IdSession); if (session != null && session.IsConnected) { IInfoUtilisateur info = session.GetInfoUtilisateur(); //TESTDBKEYOK if (info != null) { keyUser = info.KeyUtilisateur; } try { cnx = CSc2iDataServer.GetInstance().GetDatabaseConnexion(lstElements.IdSession, typeof(CProjet)); } catch //En cas d'erreur, c'est probablement que la session a été fermée, du coup, on peut y aller ! { cnx = null; } System.Threading.Thread.Sleep(50); } else { cnx = null; } }while (cnx != null && cnx.IsInTrans()); lock (typeof(CLockerStartEtape))//S'assure que deux étapes ne démarrent pas en même temps ! { CAuthentificationSessionProcess auth = new CAuthentificationSessionProcess(); using (CSessionClient sousSession = CSessionClient.CreateInstance()) { try { sousSession.OpenSession(auth, "Projet asynchronous calc ", ETypeApplicationCliente.Process); if (keyUser != null) { sousSession.ChangeUtilisateur(keyUser); } using (CContexteDonnee ctx = new CContexteDonnee(sousSession.IdSession, true, true)) { SetModeCalculProjet(ctx); foreach (int nIdProjet in lstElements.IdsProjets) { CProjet projet = new CProjet(ctx); if (projet.ReadIfExists(nIdProjet)) { projet.RecalculateDates(false); } } foreach (int nIdMetaProjet in lstElements.IdsMetaProjets) { CMetaProjet meta = new CMetaProjet(ctx); if (meta.ReadIfExists(nIdMetaProjet)) { meta.UpdateDateDebutPlanifieeFromChilds(false); meta.UpdateDateFinPlanifieeFromChilds(false); meta.UpdateDateDebutReelleFromChilds(false); meta.UpdateDateFinReelleFromChilds(false); meta.CalcProgress(false); } } result = ctx.SaveAll(false); } } catch (Exception e) { } finally { sousSession.CloseSession(); } } } }