public CListeObjetsDonnees GetRelations(ISatisfactionBesoin satisfaction) { DateLastAcces = DateTime.Now; CCacheRelation cache = null; CFiltreData filtre; if (!m_dicCaches.TryGetValue(GetKey(satisfaction), out cache)) { filtre = new CFiltreData( CRelationBesoin_Satisfaction.c_champTypeElement + "=@1 and " + CRelationBesoin_Satisfaction.c_champIdElement + "=@2", satisfaction.GetType().ToString(), satisfaction.Id); CListeObjetsDonnees liste = new CListeObjetsDonnees(satisfaction.ContexteDonnee, typeof(CRelationBesoin_Satisfaction), filtre); liste.PreserveChanges = true; SetRelations(satisfaction, liste); return(liste); } filtre = new CFiltreDataImpossible(); if (cache.Ids.Count > 0) { filtre = new CFiltreData(CRelationBesoin_Satisfaction.c_champId + " in (" + cache.IdsPourFiltre + ")"); } else { filtre = new CFiltreDataImpossible(); } CListeObjetsDonnees lstOptim = new CListeObjetsDonnees(satisfaction.ContexteDonnee, typeof(CRelationBesoin_Satisfaction), filtre); lstOptim.PreserveChanges = true; lstOptim.InterditLectureInDB = true; return(lstOptim); }
//------------------------------------------------------------------------------------------------------------------------------ public static void SetPourcentageFor(CBesoin besoin, ISatisfactionBesoin satisfaction, double fPourcentageSouhaité) { CImputationsCouts imputations = satisfaction.GetImputationsAFaireSurUtilisateursDeCout(); CImputationCout imputation = imputations.GetImputation(besoin); if (fPourcentageSouhaité < 100 && fPourcentageSouhaité >= 0) { if (imputations != null) { double fPoids = imputations.PoidsTotal - imputation.Poids; if (fPoids == 0) { return; } CListeObjetsDonnees lst = satisfaction.RelationsSatisfaits; lst.Filtre = new CFiltreData(CBesoin.c_champId + "=@1", besoin.Id); if (lst.Count != 0) { double fCalc = fPourcentageSouhaité / 100.0 * fPoids / (1 - fPourcentageSouhaité / 100.0); CRelationBesoin_Satisfaction rel = lst[0] as CRelationBesoin_Satisfaction; rel.RatioCoutReel = fCalc; } } } }
//--------------------------------------------------- public void UnregisterSatisfaction(ISatisfactionBesoin satisfaction) { if (m_dicSatisfactionToDessin.ContainsKey(satisfaction)) { m_dicSatisfactionToDessin.Remove(satisfaction); } }
//------------------------------------------------------------------ public static void ResetCache(ISatisfactionBesoin satisfaction) { if (m_cacheRelations != null) { m_cacheRelations.Reset(); } }
//------------------------------------------- public static void Show(CFormEditionStandard formMaitresse, ISatisfactionBesoin satisfaction) { Instance.SetFormMaitresse(formMaitresse); Instance.m_panelMap.Init(satisfaction); Instance.Show(); Instance.Focus(); }
//------------------------------------------------------ private void Init(IEnumerable <ISatisfactionBesoin> lstSatisfactions) { m_listeNiveaux.Clear(); m_setSatisfactionsIntegrés.Clear(); CNiveau niveau = new CNiveau(0); foreach (ISatisfactionBesoin sat in lstSatisfactions) { niveau.AddSatisfaction(this, sat); } m_listeNiveaux.Add(niveau); CNiveau niveau0 = niveau; while (niveau.Satisfactions.Count() != 0) { niveau = CalculeNiveauSuivant(); } niveau = niveau0; while (niveau.Satisfactions.Count() != 0) { niveau = CalculeNiveauPrecedent(); } CalculeRectangles(); m_satisfactionSel = null; m_lienSel = null; }
//------------------------------------------------------------------- public void Reset(ISatisfactionBesoin satisfaction) { foreach (CCacheRelationsParContexte cache in m_dicContexteToCache.Values) { cache.Reset(satisfaction); } }
//----------------------------------------------------- private CSegmentDroite DrawLien( Graphics g, ISatisfactionBesoin besoinSatisfait, ISatisfactionBesoin satisfaction, Pen p) { if (besoinSatisfait == null || satisfaction == null) { return(null); } CInfoDessinSatisfaction dessin1 = null; CInfoDessinSatisfaction dessin2 = null; m_dicSatisfactionToRect.TryGetValue(besoinSatisfait, out dessin1); m_dicSatisfactionToRect.TryGetValue(satisfaction, out dessin2); CSegmentDroite segment = null; if (dessin1 != null && dessin2 != null) { segment = new CSegmentDroite(new Point(dessin1.Rectangle.Right, dessin1.Rectangle.Top + m_nHauteurSatisfactionDefaut / 2), new Point(dessin2.Rectangle.Left, dessin2.Rectangle.Top + m_nHauteurSatisfactionDefaut / 2)); g.DrawLine(p, segment.Point1, segment.Point2); segment.DrawFlechePt1(g, p, 4); } return(segment); }
//------------------------------------------------------------ void menuSatisfaction_Click(object sender, EventArgs e) { CObjetDonneeMenuItem item = sender as CObjetDonneeMenuItem; ISatisfactionBesoin satisfaction = item != null ? item.ObjetDragDrop as ISatisfactionBesoin : null; if (satisfaction != null) { if (m_bIsMenuDeleteSatisfaction && m_extModeEdition.ModeEdition) { if (MessageBox.Show(I.T("Remove @1 from satisfactions list .|20637", satisfaction.LibelleSatisfactionComplet), "", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { Besoin.RemoveSatisfaction(satisfaction); InitChamps(CurrentItem); } } else { CObjetDonnee objet = satisfaction.ObjetPourEditionElementACout.GetObjetInContexte(CSc2iWin32DataClient.ContexteCourant); CTimosApp.Navigateur.EditeElement(objet, false, ""); } } }
//--------------------------------------------------------------- public CDessinSatisfaction( CNiveauMapSatisfaction niveau, ISatisfactionBesoin satisfaction) { m_satisfaction = satisfaction; m_niveau = niveau; niveau.BaseSatisfactions.RegisterDessin(this); }
//------------------------------------------------------------------------------------------------------------------------------ public static ISatisfactionBesoin[] GetFlattenSatisfactionsHierarchy(ISatisfactionBesoin satisfaction) { HashSet <ISatisfactionBesoin> set = new HashSet <ISatisfactionBesoin>(); HashSet <ISatisfactionBesoin> setSatFaits = new HashSet <ISatisfactionBesoin>(); FillFlattenSatisfactionsHierarchy(satisfaction, set, setSatFaits); return(set.ToArray()); }
//------------------------------------------------------------------- public void Reset(ISatisfactionBesoin satisfaction) { DateLastAcces = DateTime.Now; CCacheRelation cache = null; if (m_dicCaches.TryGetValue(GetKey(satisfaction), out cache)) { m_dicCaches.Remove(GetKey(satisfaction)); } }
//------------------------------------------------------------------------------------------------------------------------------ /// <summary> /// Indique si cette satisfaction satisfait ce besoin directement ou indirectement /// </summary> /// <param name="satisfaction"></param> /// <param name="besoin"></param> /// <returns></returns> public static bool IsRecursiveSatisfactionFor(ISatisfactionBesoin satisfaction, CBesoin besoin) { if (besoin == null || satisfaction == null) { return(false); } HashSet <ISatisfactionBesoin> satisfactionsFaites = new HashSet <ISatisfactionBesoin>(); return(IsRecursiveSatisfactionFor(satisfaction, besoin, satisfactionsFaites)); }
//------------------------------------------------------------------------------ private void m_menuAfficherElement_Click(object sender, EventArgs e) { ISatisfactionBesoin sat = m_satisfactionSel; if (sat != null && sat.ObjetPourEditionElementACout != null) { CObjetDonnee objet = sat.ObjetPourEditionElementACout.GetObjetInContexte(CSc2iWin32DataClient.ContexteCourant); CTimosApp.Navigateur.EditeElement(objet, false, ""); } }
public void SetRelations(ISatisfactionBesoin satisfaction, CListeObjetsDonnees relations) { CCacheRelation cache = new CCacheRelation(); foreach (CRelationBesoin_Satisfaction rel in relations) { cache.AddRelation(rel); } m_dicCaches[GetKey(satisfaction)] = cache; }
//------------------------------------------------------------------- public bool IsLoaded(ISatisfactionBesoin satisfaction) { CCacheRelationsParContexte cache = null; if (!m_dicContexteToCache.TryGetValue(satisfaction.ContexteDonnee.IdContexteDonnee, out cache)) { return(false); } return(cache.IsLoaded(satisfaction)); }
//------------------------------------------------------------------ public CRelationBesoin_Satisfaction GetRelationToBesoin(ISatisfactionBesoin satisfaction, CBesoin besoin) { CListeObjetsDonnees lst = GetRelationsBesoinsSatisfaits(satisfaction); lst.Filtre = new CFiltreData(CBesoin.c_champId + "=@1", besoin.Id); if (lst.Count > 0) { return(lst[0] as CRelationBesoin_Satisfaction); } return(null); }
//--------------------------------------------------- public CDessinSatisfaction GetDessin(ISatisfactionBesoin satisfaction) { CDessinSatisfaction de = null; if (satisfaction == null) { return(null); } m_dicSatisfactionToDessin.TryGetValue(satisfaction, out de); return(de); }
//------------------------------------------ public void Init( ISatisfactionBesoin satisfaction, bool bIsEnEdition) { m_satisfaction = satisfaction; m_bIsEnEdition = bIsEnEdition; m_picBox.Visible = m_satisfaction != null; if (m_satisfaction != null) { m_picBox.Image = m_satisfaction.RelationsSatisfaits.Count > 0 ? Resources.PuzzleMal32:Resources.PuzzleMal32Trans; } }
//------------------------------------------------------------------- public CListeObjetsDonnees GetRelations(ISatisfactionBesoin satisfaction) { CCacheRelationsParContexte cache = null; if (!m_dicContexteToCache.TryGetValue(satisfaction.ContexteDonnee.IdContexteDonnee, out cache)) { NettoieCache(); cache = new CCacheRelationsParContexte(); m_dicContexteToCache[satisfaction.ContexteDonnee.IdContexteDonnee] = cache; } return(cache.GetRelations(satisfaction)); }
//------------------------------------------------------------------- public void SetRelations(ISatisfactionBesoin satisfaction, CListeObjetsDonnees lstRelations) { CCacheRelationsParContexte cache = null; if (!m_dicContexteToCache.TryGetValue(satisfaction.ContexteDonnee.IdContexteDonnee, out cache)) { NettoieCache(); cache = new CCacheRelationsParContexte(); m_dicContexteToCache[satisfaction.ContexteDonnee.IdContexteDonnee] = cache; } cache.SetRelations(satisfaction, lstRelations); }
//------------------------------------------------------ private Rectangle CalculeEnglobants(CNiveau niveau, ref int nIndexNext, int nIndexHierarchique) { ISatisfactionBesoin satisfaction = niveau.Satisfactions.ElementAt(nIndexNext); CInfoDessinSatisfaction dessin = null; m_dicSatisfactionToRect.TryGetValue(satisfaction, out dessin); Rectangle rctRetour = dessin.Rectangle; nIndexNext++; HashSet <ISatisfactionBesoin> besoinsFils = new HashSet <ISatisfactionBesoin>(); int nIndexStartFils = nIndexNext; ISatisfactionBesoinAvecSousBesoins satB = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (satB != null && m_setSatisfactionsExpanded.Contains(satB)) { foreach (CBesoin besoin in satB.GetSousBesoinsDeSatisfaction()) { besoinsFils.Add(besoin); } } else if (satisfaction is CBesoin) { foreach (CBesoin besoin in ((CBesoin)satisfaction).BesoinsFils) { besoinsFils.Add(besoin); } } if (besoinsFils.Count > 0) { while (nIndexNext < niveau.Satisfactions.Count() && besoinsFils.Contains(niveau.Satisfactions.ElementAt(nIndexNext))) { Rectangle rctFils = CalculeEnglobants(niveau, ref nIndexNext, nIndexHierarchique + 1); rctRetour = Rectangle.Union(rctRetour, rctFils); } for (int nFils = nIndexStartFils; nFils < nIndexNext; nFils++) { ISatisfactionBesoin satFils = niveau.Satisfactions.ElementAt(nFils); CInfoDessinSatisfaction dessinFils = null; m_dicSatisfactionToRect.TryGetValue(satFils, out dessinFils); dessinFils.Offset(m_nOffestNiveau, 0); } rctRetour.Width += m_nOffestNiveau; dessin.Rectangle = new Rectangle(rctRetour.Left + m_nOffestNiveau / 3, rctRetour.Top, m_nLargeurNiveauDefaut, rctRetour.Height + 4); } dessin.NiveauHierarchique = nIndexHierarchique; return(rctRetour); }
//----------------------------------------------------- private void Invalidate(ISatisfactionBesoin satisfaction) { if (satisfaction != null) { CDessinSatisfaction dessin = m_baseMap.GetDessin(satisfaction); if (dessin != null) { Rectangle r = new Rectangle(PointToDisplay(new Point(dessin.Rectangle.Left - 5, dessin.Rectangle.Top - 5)), new Size(SizeToDisplay(dessin.Rectangle.Width + 11), SizeToDisplay(dessin.Rectangle.Height + 11))); r.Inflate(2, 2); m_panelDessin.Invalidate(r); } } }
//------------------------------------------------------ public void Init(ISatisfactionBesoin satisfaction) { m_satisfactionRacine = satisfaction; List <ISatisfactionBesoin> lst = new List <ISatisfactionBesoin>(); lst.Add(satisfaction); ISatisfactionBesoinAvecSousBesoins sab = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (sab != null) { m_setSatisfactionsExpanded.Add(sab); } Init(lst); }
//------------------------------------------------------------------------------------------------------------------------------ public static bool IsDirectSatisfactionFor(ISatisfactionBesoin satisfaction, CBesoin besoin) { if (besoin == null || satisfaction == null) { return(false); } CListeObjetsDonnees lstSatisfaits = satisfaction.RelationsSatisfaits; lstSatisfaits.Filtre = new CFiltreData(CBesoin.c_champId + "=@1", besoin.Id); int nCoutn = lstSatisfaits.Count; return(nCoutn > 0); }
//----------------------------------------------------- private void Invalidate(ISatisfactionBesoin satisfaction) { if (satisfaction != null) { CInfoDessinSatisfaction dessin = null; m_dicSatisfactionToRect.TryGetValue(satisfaction, out dessin); if (dessin != null) { Rectangle r = new Rectangle(PointToDisplay(new Point(dessin.Rectangle.Left - 5, dessin.Rectangle.Top - 5)), new Size(SizeToDisplay(dessin.Rectangle.Width + 11), SizeToDisplay(dessin.Rectangle.Height + 11))); r.Inflate(2, 2); m_panelDessin.Invalidate(r); } } }
//------------------------------------------------------------------------------------------------------------------------------ public static double GetPourcentageFor(CBesoin besoin, ISatisfactionBesoin satisfaction) { CImputationsCouts imputations = satisfaction.GetImputationsAFaireSurUtilisateursDeCout(); CImputationCout imputation = imputations.GetImputation(besoin); if (imputations == null) { return(0); } if (imputations.PoidsTotal > 0) { return(imputation.Poids / imputations.PoidsTotal * 100); } return(0); }
//------------------------------- public CInfoDessinSatisfaction( Rectangle rct, ISatisfactionBesoin satisfaction, bool bIsExpanded) { m_rectangle = rct; m_satisfaction = satisfaction; ISatisfactionBesoinAvecSousBesoins sab = satisfaction as ISatisfactionBesoinAvecSousBesoins; if (sab != null) { m_bHasChildren = sab.GetSousBesoinsDeSatisfaction().Count() != 0; } m_bIsExpanded = bIsExpanded; }
//------------------------------------------------------------------ /// <summary> /// Retourne les liens aux besoins satisfaits /// </summary> /// <param name="objet"></param> /// <returns></returns> public static CListeObjetsDonnees GetRelationsBesoinsSatisfaits(ISatisfactionBesoin satisfaction) { if (m_cacheRelations != null) { return(m_cacheRelations.GetRelations(satisfaction)); } CFiltreData filtre = new CFiltreData( CRelationBesoin_Satisfaction.c_champTypeElement + "=@1 and " + CRelationBesoin_Satisfaction.c_champIdElement + "=@2", satisfaction.GetType().ToString(), satisfaction.Id); CListeObjetsDonnees liste = new CListeObjetsDonnees(satisfaction.ContexteDonnee, typeof(CRelationBesoin_Satisfaction), filtre); liste.PreserveChanges = true; return(liste); }
//------------------------------------------------------ public void Init(ISatisfactionBesoin satisfaction) { m_satisfactionRacine = satisfaction; List <ISatisfactionBesoin> lst = new List <ISatisfactionBesoin>(); lst.Add(satisfaction); m_baseMap.Init(lst); m_satisfactionSel = null; m_lienSel = null; CDessinSatisfaction dessin = m_baseMap.GetDessin(satisfaction); if (dessin != null) { dessin.Expand(); } }