private void Calc644(BaseCalc_Class calc) { int index = 1; BaseCalc_Class.clValue[] values; List <decimal> summa = new List <decimal>(); values = calc.Value.OrderBy(x => x.Pollution.Number).ToArray(); foreach (var vol in _sample.Volumes) { Period period = Helpers.LogicHelper.PeiodLogic.FirstModel(vol.PeriodID); foreach (var value in values) { SetDefCol(index, value); decimal K = calc.RunFormula(value).Value; table.value.Add(new MyTools.C_ValueCell(K, index - 1, 7)); //summa.Add(calc.Answer.First(x => x.Key == vol.ID).Value.Summ.First(x => x.Key == one._Pollution.ID).Value); summa.Add(calc.Answer.First(x => x.Key == vol.ID).Value.Summ.First(x => x.PollutionID == value.Pollution.ID).Summ); //summa.Add(Math.Round(K * (decimal)vol.Value * period.Price, 2, MidpointRounding.AwayFromZero)); table.value.Add(new MyTools.C_ValueCell(summa.Last().ToMoney(), index - 1, 8, style: Styles.s_RLTB_RC_T10_W)); index++; } table.value.Add(new MyTools.C_ValueCell(period.Price.ToMoney(), index - values.Length - 1, 4, values.Length - 1)); table.value.Add(new MyTools.C_ValueCell(vol.Value, index - values.Length - 1, 5, values.Length - 1, 1)); } table.value.Add(new MyTools.C_ValueCell(summa.Sum().ToMoney(), index - 1, 8, style: Styles.s_RLTB_RC_T10_W)); GeneralSumma.Add(Math.Round(summa.Sum() * (1 + AdditionnTable.GetPeriod.NDS / 100), 2, MidpointRounding.AwayFromZero)); table.value.Add(new MyTools.C_ValueCell(GeneralSumma.Last().ToMoney(), index, 8, style: Styles.s_RLTB_RC_T10_W_B)); }
private void FormulControl(BaseCalc_Class calc) { string formula = string.Empty; foreach (var one in PollutionBase_Class.AllCalculationFormul.Where(x => x.Label.Length > 0).OrderBy(x => x.Number).GroupBy(x => x.Label)) { foreach (var pol in one.Select(x => x.PollutionID)) { if (calc.Value.Select(x => x.Pollution.ID).Contains(pol)) { formula += $" + {one.Key}"; goto Next; } } Substitute.AddExchange(one.Key, (e) => e.Row.ZeroHeight = true, 1); Next :; } Substitute.AddExchange(mark.formula, formula.Substring(3), 1); }
/// <summary>Протестит значения на косяки</summary> public static HitModePollution[] TestValues(BaseCalc_Class calc) { var last = LastHitObject(calc.Objecte.ID); List <HitModePollution> result = new List <HitModePollution>(); foreach (var mode in HitModePollutions.Where(x => x.Joint && x.Formula.Length > 0)) { string formula = mode.Formula; HitSelectPollution joint = last.FirstOrDefault(x => x.IDHitModePollution == mode.ID); //formula = formula.Replace(Const_Class.Multiplier, mode.Multi(joint == null ? 0 : joint.Number).ToString()); //formula = formula.Replace(Const_Class.Summa, calc.Answer.Sum(x=>x.Value.Summ).ToString()); formula = formula.Replace(Const_Class.Limit, AdditionnTable.ListPeriod.Last(x => x.YM <= DateControl_Class.SelectMonth).MinLimits.ToString()); if (mode.PollutionID > 0) { if (calc.Value.FirstOrDefault(x => x.Pollution.ID == mode.PollutionID) != null) { BaseCalc_Class.SetConst(ref formula, calc.Value.First(x => x.Pollution.ID == mode.PollutionID)); if (Math_Class.Get_Comparison_Calc(formula)) { result.Add(mode); } } } else { foreach (var one in calc.Value) { BaseCalc_Class.SetConst(ref formula, one); if (Math_Class.Get_Comparison_Calc(formula)) { result.Add(mode); } } } } return(result.ToArray()); }
private bool Calc621(BaseCalc_Class calc, bool PriceNorm) { calc.Calc(); int index = 1; BaseCalc_Class.clValue[] noNormValues; List <decimal> summa = new List <decimal>(); if (PriceNorm) { noNormValues = calc.Value.Where(x => x.PriceNorm != null).OrderBy(x => x.Pollution.Number).ToArray(); foreach (var vol in _sample.Volumes) { foreach (var one in noNormValues) { var volume = calc.Answer.FirstOrDefault(x => x.Key == vol.ID); if (volume.Value == null) { continue; } var value = volume.Value.Summ.FirstOrDefault(x => x.PollutionID == one.Pollution.ID); if (value == null) { continue; } SetDefCol(index, one); table.value.Add(new MyTools.C_ValueCell(calc.FromulaNotTrKf(one), index - 1, 5)); table.value.Add(new MyTools.C_ValueCell(Math.Round(one.PriceNorm.Price, 2), index - 1, 6)); table.value.Add(new MyTools.C_ValueCell(one.CoefficientValue != null ? Math.Round(one.CoefficientValue.Value, 1) : 1, index - 1, 7)); //summa.Add(Math.Round(calc.RunFormula(one), 2, MidpointRounding.AwayFromZero)); summa.Add(calc.Answer.First(x => x.Key == vol.ID).Value.Summ.First(x => x.PollutionID == one.Pollution.ID).Summ); table.value.Add(new MyTools.C_ValueCell(summa.Last().ToMoney(), index - 1, 8, style: Styles.s_RLTB_RC_T10_W)); index++; } } table.value.Add(new MyTools.C_ValueCell(_sample.Volumes.Sum(x => x.Value), 0, 4, index - 2)); table.value.Add(new MyTools.C_ValueCell(summa.Sum().ToMoney(), index - 1, 8, style: Styles.s_RLTB_RC_T10_W)); GeneralSumma.Add(Math.Round(summa.Sum() * (1 + AdditionnTable.GetPeriod.NDS / 100), 2, MidpointRounding.AwayFromZero)); table.value.Add(new MyTools.C_ValueCell(GeneralSumma.Last().ToMoney(), index, 8, style: Styles.s_RLTB_RC_T10_W_B)); } else { noNormValues = calc.Value.Where(x => x.PriceNorm == null).OrderBy(x => x.Pollution.Number).ToArray(); if (noNormValues.Length == 0) { return(false); } foreach (var vol in _sample.Volumes) { foreach (var one in noNormValues) { var answerVolume = calc.Answer.FirstOrDefault(x => x.Key == vol.ID); if (answerVolume.Value != null) { var pollutionValue = answerVolume.Value.Summ.FirstOrDefault(x => x.PollutionID == one.Pollution.ID); if (pollutionValue != null) { SetDefCol(index, one); //table.value.Add(new MyTools.C_ValueCell(calc.RunningFormulaVolume(one, vol.ID), index - 1, 5)); summa.Add(pollutionValue.Summ); //summa.Add(Math.Round(calc.RunFormula(one, vol.ID), 2)); table.value.Add(new MyTools.C_ValueCell(summa.Last().ToMoney(), index - 1, 8, style: Styles.s_RLTB_RC_T10_W)); index++; } } } table.value.Add(new MyTools.C_ValueCell(vol.Value, index - noNormValues.Length - 1, 6, noNormValues.Length - 1, 1)); table.value.Add(new MyTools.C_ValueCell(Math.Round(Helpers.LogicHelper.PeiodLogic.FirstModel(vol.PeriodID).Price, 2, MidpointRounding.AwayFromZero), index - noNormValues.Length - 1, 4, noNormValues.Length - 1, 1)); } table.value.Add(new MyTools.C_ValueCell(summa.Sum().ToMoney(), index - 1, 8, style: Styles.s_RLTB_RC_T10_W)); GeneralSumma.Add(Math.Round(summa.Sum() * (1 + AdditionnTable.GetPeriod.NDS / 100), 2, MidpointRounding.AwayFromZero)); table.value.Add(new MyTools.C_ValueCell(GeneralSumma.Last().ToMoney(), index, 8, style: Styles.s_RLTB_RC_T10_W_B)); } return(true); }