//------------------------------------------------------------------------------------------------------------------------------ public static double CalcImputationAFaireSur(IElementACout source, IElementACout utilisateur, bool bCoutReel) { if (source == null || source.Row.RowState == DataRowState.Detached || source.Row.RowState == DataRowState.Deleted || utilisateur == null || utilisateur.Row.RowState == DataRowState.Deleted || utilisateur.Row.RowState == DataRowState.Detached) { return(0); } CImputationsCouts imputations = source.GetImputationsAFaireSurUtilisateursDeCout(); return(imputations.GetCoutImputéeA(utilisateur, bCoutReel)); }
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); }
//------------------------------------------------------------------------------------------------------------------------------ public static void FillSetUtilisateurs(IElementACout elementACout, HashSet <IElementACout> set, params IElementACout[] stopOn) { if (set.Contains(elementACout)) { return; } set.Add(elementACout); if (stopOn.Length > 0 && stopOn.Contains(elementACout)) { return; } CImputationsCouts imputations = elementACout.GetImputationsAFaireSurUtilisateursDeCout(); foreach (CImputationCout imput in imputations.Imputations) { IElementACout elt = imput.UtilisateurDeCout; if (elt != null && elt.Row.RowState != DataRowState.Deleted && elt.Row.RowState != DataRowState.Detached) { FillSetUtilisateurs(elt, set, stopOn); } } }
//------------------------------------------------------------------------------------------------------------------------------ private static void RecalcCoutMontant(IElementACout source, bool bCoutReel, HashSet <DataRow> setDejaRecalcules) { if (source == null) { return; } if (setDejaRecalcules.Contains(source.Row.Row)) { return; } setDejaRecalcules.Add(source.Row.Row); if (source.Row.RowState == DataRowState.Deleted || source.Row.RowState == DataRowState.Detached) { source.VersionToReturn = DataRowVersion.Original; } CImputationsCouts imputations = source.GetImputationsAFaireSurUtilisateursDeCout(); HashSet <IElementACout> elementsModifies = new HashSet <IElementACout>(); CValeursImputées newValeurs = GetValeursImputéesSurUtilisateurs(source); newValeurs.Reset(bCoutReel); CValeursImputées oldValeurs = GetValeursImputéesSurUtilisateurs(source); HashSet <string> newElementsImputes = new HashSet <string>(); if (source.Row.RowState != DataRowState.Deleted && source.Row.RowState != DataRowState.Deleted) { if (!source.IsCoutFromSources(bCoutReel)) { double fCout = source.CalculeTonCoutPuisqueTuNeCalculePasAPartirDesSourcesDeCout(bCoutReel); source.SetCoutSansCalculDesParents(fCout, bCoutReel); SetValeurImputéeDeSource(source, source, bCoutReel ? source.CoutReel : source.CoutPrevisionnel, bCoutReel); newValeurs.SetImputation(source, bCoutReel ? source.CoutReel : source.CoutPrevisionnel, bCoutReel); newElementsImputes.Add(source.IdUniversel); } } foreach (CImputationCout imputation in imputations.Imputations) { newElementsImputes.Add(imputation.UtilisateurDeCout.IdUniversel); IElementACout utilisateur = imputation.UtilisateurDeCout; if (utilisateur.Row.RowState == DataRowState.Deleted || utilisateur.Row.RowState == DataRowState.Deleted) { newValeurs.SetImputation(utilisateur, 0, bCoutReel); } else { double fOld = oldValeurs.GetImputation(utilisateur, bCoutReel); double fNew = 0; if (source.Row.RowState != DataRowState.Deleted && source.Row.RowState != DataRowState.Detached) { fNew = source.CalcImputationAFaireSur(utilisateur, bCoutReel); } if (Math.Abs(fOld - fNew) > 0.01) { elementsModifies.Add(utilisateur); setDejaRecalcules.Remove(utilisateur.Row.Row); double fVal = bCoutReel ? utilisateur.CoutReel : utilisateur.CoutPrevisionnel; fVal -= fOld; fVal += fNew; utilisateur.SetCoutSansCalculDesParents(fVal, bCoutReel); SetValeurImputéeDeSource(utilisateur, source, fNew, bCoutReel); } newValeurs.SetImputation(utilisateur, fNew, bCoutReel); } CUtilElementACout.SetValeursImputéesSurUtilisateurs(source, newValeurs); } //Enlève les valeurs qui ont été imputées sur des éléments qui ne sont plus imputés foreach (IElementACout utilisateur in oldValeurs.GetObjetsImputés(source.ContexteDonnee)) { if (!newElementsImputes.Contains(utilisateur.IdUniversel)) { //On avait imputé ce type, mais il ne faut plus //Vérifie que le coût de cet utilisateur intègre bien mon cout CValeursImputées valeurs = GetValeursImputéesDeSources(utilisateur); if (valeurs.ContainsElement(source, bCoutReel)) { double fImput = oldValeurs.GetImputation(utilisateur, bCoutReel); if (fImput > 0.001) { elementsModifies.Add(utilisateur); setDejaRecalcules.Remove(utilisateur.Row.Row); double fVal = bCoutReel ? utilisateur.CoutReel : utilisateur.CoutPrevisionnel; fVal -= fImput; utilisateur.SetCoutSansCalculDesParents(fVal, bCoutReel); SetValeurImputéeDeSource(utilisateur, source, 0, bCoutReel); } } } } if (source.Row.RowState != DataRowState.Deleted && source.Row.RowState != DataRowState.Detached) { source.TypesCoutsParentsARecalculer &= bCoutReel ? ~ETypeCout.réel : ~ETypeCout.Prévisionnel; } foreach (IElementACout eltModif in elementsModifies) { RecalcCoutMontant(eltModif, bCoutReel, setDejaRecalcules); } }