//-------------------------------------------------------------------------- public double GetCoutResume(bool bCoutReel) { Dictionary <IElementACout, bool> setElementToAPrendreEnCompte = new Dictionary <IElementACout, bool>(); FillSetElementsACoutPourResumeCout(bCoutReel, setElementToAPrendreEnCompte); Dictionary <IElementACout, CImputationsCouts> cacheImputations = new Dictionary <IElementACout, CImputationsCouts>(); //On a tous les besoins dans un hashet, maintenant, il faut sommer les couts double fCout = 0; foreach (KeyValuePair <IElementACout, bool> kv in setElementToAPrendreEnCompte) { if (kv.Value) { IElementACout element = kv.Key; if (element is CBesoin) { bool bSourceInSet = false; foreach (IElementACout elt in element.GetSourcesDeCout(bCoutReel)) { if (setElementToAPrendreEnCompte.ContainsKey(elt)) { bSourceInSet = true; break; } } if (!bSourceInSet) { fCout += bCoutReel ? element.CoutReel : element.CoutPrevisionnel; } else { foreach (IElementACout source in element.GetSourcesDeCout(bCoutReel)) { if (!setElementToAPrendreEnCompte.ContainsKey(source)) //Si la source est dans le set, elle sera ajoutée, donc on ne la prend pas { CImputationsCouts imputations = null; if (!cacheImputations.TryGetValue(source, out imputations)) { imputations = source.GetImputationsAFaireSurUtilisateursDeCout(); cacheImputations[source] = imputations; } fCout += imputations.GetCoutImputéeA(element, bCoutReel); } } } } } } return(fCout); }
private ToolStripItem CreateItemSatisfaction(IElementACout utilisateur, IElementACout source) { CImputationsCouts imputation = source.GetImputationsAFaireSurUtilisateursDeCout(); if (imputation != null) { CImputationCout i = imputation.GetImputation(utilisateur); if (i != null && i.Poids != 0) { double fVal = imputation.GetCoutImputéeA(utilisateur, m_bMenuForCoutReel); ToolStripMenuItem itemElementACout = new ToolStripMenuItem(); itemElementACout.Text = fVal.ToString("0.####") + " "; if (source is ISatisfactionBesoin) { itemElementACout.Text += ((ISatisfactionBesoin)source).LibelleSatisfactionComplet; } else { itemElementACout.Text += source.Libelle; } if (source is ISatisfactionBesoin && utilisateur is CBesoin) { double fPct = CUtilSatisfaction.GetPourcentageFor((CBesoin)utilisateur, (ISatisfactionBesoin)source); itemElementACout.Text += " (" + fPct.ToString("0.##") + "%)"; } else { itemElementACout.Text += " (100%)"; } itemElementACout.Tag = source; itemElementACout.Image = DynamicClassAttribute.GetImage(source.GetType()); if (fVal == 0) { itemElementACout.BackColor = Color.LightPink; } if (source.GetSourcesDeCout(m_bMenuForCoutReel).Length > 0) { ToolStripMenuItem dummy = new ToolStripMenuItem(); itemElementACout.DropDownItems.Add(dummy); itemElementACout.DropDownOpening += new EventHandler(itemElementACout_DropDownOpening); } itemElementACout.MouseUp += new MouseEventHandler(itemElementACout_MouseUp); return(itemElementACout); } } return(null); }
//------------------------------------------------------------------------------------------------------------------------------ private static void InvalideLeCoutDesSources(IElementACout elt, bool bCoutReel, HashSet <Type> typesAInvalider, HashSet <IElementACout> elementsFaits) { if (elt == null || elt.Row.RowState == DataRowState.Deleted || elt.Row.RowState == DataRowState.Detached) { return; } if (elementsFaits.Contains(elt)) { return; } elementsFaits.Add(elt); foreach (IElementACout source in elt.GetSourcesDeCout(bCoutReel)) { InvalideLeCoutDesSources(source, bCoutReel, typesAInvalider, elementsFaits); } if (typesAInvalider.Contains(elt.GetType())) { OnChangeCout(elt, bCoutReel, false); } }
//------------------------------------------------------------------------------------------------------------------------------ private static void FillDicSources( bool bCoutReel, IElementACout elementACout, bool bRecursif, Dictionary <IElementACout, IElementACout[]> elementsToSource) { if (elementsToSource.ContainsKey(elementACout)) { return; } IElementACout[] sources = elementACout.GetSourcesDeCout(bCoutReel); elementsToSource[elementACout] = sources; if (bRecursif) { foreach (IElementACout source in sources) { FillDicSources(bCoutReel, source, true, elementsToSource); } } }
//--------------------------------------------------------- void itemElementACout_DropDownOpening(object sender, EventArgs e) { ToolStripMenuItem item = sender as ToolStripMenuItem; IElementACout elt = item != null ? item.Tag as IElementACout : null; if (elt != null) { if (item.DropDownItems.Count == 1 && item.DropDownItems[0].Tag == null) { item.DropDownItems.Clear(); foreach (IElementACout source in elt.GetSourcesDeCout(m_bMenuForCoutReel)) { ToolStripItem itemFils = CreateItemSatisfaction(elt, source); if (itemFils != null) { item.DropDownItems.Add(itemFils); } } } } }
public void ShowMenuDetailCalcul( IElementACout utilisateur, CItemBesoin itemBesoin, ContextMenuStrip menu, bool bCoutReel, Control ctrlRepere) { m_bMenuForCoutReel = bCoutReel; foreach (ToolStripItem item in new ArrayList(menu.Items)) { menu.Items.Remove(item); item.Dispose(); } if (utilisateur != null) { foreach (IElementACout elt in utilisateur.GetSourcesDeCout(bCoutReel)) { ToolStripItem item = CreateItemSatisfaction(utilisateur, elt); if (item != null) { menu.Items.Add(item); } } if (menu.Items.Count > 0) { menu.Items.Add(new ToolStripSeparator()); } ToolStripMenuItem itemSatisfaction = new ToolStripMenuItem(); double fCout = bCoutReel ? utilisateur.CoutReel : utilisateur.CoutPrevisionnel; itemSatisfaction.Text = (menu.Items.Count > 0 ? "--->" : "") + fCout.ToString("0.####"); itemSatisfaction.Image = Resources.PuzzleMal20; menu.Items.Add(itemSatisfaction); bool bShouldAddSeparateur = true; if (itemBesoin != null) { foreach (CItemBesoin childItem in itemBesoin.ChildItems) { if (childItem.Besoin.GetImputationsAFaireSurUtilisateursDeCout().GetCoutImputéeA(utilisateur, bCoutReel) == 0) { if (bShouldAddSeparateur) { menu.Items.Add(new ToolStripSeparator()); } bShouldAddSeparateur = false; ToolStripMenuItem item = new ToolStripMenuItem(); double fVal = bCoutReel ? childItem.CoutReel : childItem.CoutPrevisionnel; item.Text = fVal.ToString("0.####") + " " + childItem.Besoin.Libelle; item.Image = DynamicClassAttribute.GetImage(childItem.Besoin.GetType()); menu.Items.Add(item); } } } } if (menu.Items.Count > 0) { menu.Show(ctrlRepere, new Point(0, ctrlRepere.Height)); } }