예제 #1
0
        /// <summary>Выполнение формул С объёмом</summary>
        public KeyValuePair <uint, decimal> RunFormula(clValue value, uint volumeID = 0)
        {
            decimal result      = 0;
            string  formulaText = value.CalculationFormula.Formula;

            var formula = Helpers.CalcHelper.GetFormula(formulaText);

            if (SetConst(formula, value))
            {
                if (volumeID > 0)
                {
                    Volume volume = _sample.Volumes.First(x => x.ID == volumeID);

                    var period = Helpers.LogicHelper.PeiodLogic.FirstModel(volume.PeriodID);

                    if (value.PriceNorm == null)
                    {
                        formula.TrySetValue(Const_Class.Tariff, period.Price);
                    }

                    formula.TrySetValue(Const_Class.Volume, (decimal)volume.Value);

                    result += GetRoundedFormulaSumm(formula);
                }
                else if (Norm.CurtName.Contains("621"))
                {
                    foreach (var volume in _sample.Volumes)
                    {
                        var period = Helpers.LogicHelper.PeiodLogic.FirstModel(volume.PeriodID);

                        if (value.PriceNorm == null)
                        {
                            formula.TrySetValue(Const_Class.Tariff, period.Price);
                        }

                        formula.TrySetValue(Const_Class.Volume, (decimal)volume.Value);

                        result += Math_Class.CalculateStroku(formulaText, 7);
                    }
                }
                else
                {
                    result = GetRoundedFormulaSumm(formula);
                }
            }

            return(new KeyValuePair <uint, decimal>(value.Pollution.ID, result));
        }
예제 #2
0
        /// <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());
        }