Exemple #1
0
        private void AddDelta(MoneyColumnMetadataJsModel col, TableViewModel table, int daysDiff, string name)
        {
            var sequence = table.Values.SkipWhile(v =>
            {
                var s = v.CalculatedCells.GetValueOrDefault(col)?.Value;
                return(s == null || double.IsNaN(s.Value));
            }).OrderByDescending(v => v.When);
            var today   = sequence.FirstOrDefault();
            var baseSet = sequence.FirstOrDefault(v => v.When.Date.AddDays(daysDiff) <= DateTime.Now.Date);

            var todayValue   = today?.CalculatedCells.GetValueOrDefault(col);
            var baseSetValue = baseSet?.CalculatedCells.GetValueOrDefault(col);

            if (todayValue != null && baseSetValue != null)
            {
                Ccy = Ccy ?? todayValue.Ccy;

                IncompleteData |= todayValue.FailedToResolve.Concat(baseSetValue.FailedToResolve).Any();

                var dT = todayValue.AdjustedValue - baseSetValue.AdjustedValue;

                if (dT != null && !double.IsNaN(dT.Value) && !double.IsInfinity(dT.Value))
                {
                    Deltas.Add(new Pair {
                        Name = name, Value = dT.Value
                    });
                }
                else
                {
                    IncompleteData = true;
                }
            }
        }
Exemple #2
0
 public static CalculatedResult FromMoney(MoneyColumnMetadataJsModel h, MoneyStateModel money, double adjustment) => new CalculatedResult(h)
 {
     Money       = money,
     _ccy        = money.Ccy,
     _adjustment = adjustment,
     _value      = money.Amount,
     _tooltip    = money.Description != null ? $"{money.Description} + {adjustment.ToString(CultureInfo.CurrentCulture)}" : $"{(money.Amount).ToString(CultureInfo.CurrentCulture)}({money.Amount.ToString(CultureInfo.CurrentCulture)} + {adjustment.ToString(CultureInfo.CurrentCulture)})"
 };
Exemple #3
0
 public static CalculatedResult FromComputed(MoneyColumnMetadataJsModel item, double?value, string ccy,
                                             IEnumerable <string> failedToResolve, double adjustment, string tooltip) => new CalculatedResult(item)
 {
     _value           = value,
     _ccy             = ccy,
     _failedToResolve = failedToResolve,
     _adjustment      = adjustment,
     _tooltip         = tooltip
 };
Exemple #4
0
 public ReferenceExpression(MoneyColumnMetadataJsModel column)
 {
     _column = column;
 }
 public ConstantExpression(MoneyColumnMetadataJsModel model, string source)
 {
     _model  = model;
     _source = source;
 }
 public EmptyExpression(MoneyColumnMetadataJsModel model)
 {
     Value = CalculatedResult.Empty(model);
 }
Exemple #7
0
 protected CalculatedResult(MoneyColumnMetadataJsModel item)
 {
     Column           = item;
     _failedToResolve = Enumerable.Empty <string>();
 }
Exemple #8
0
 public static CalculatedResult ResolutionFail(MoneyColumnMetadataJsModel item, params string[] failedToResolve) => new CalculatedResult(item)
 {
     _ccy             = null,
     _value           = double.NaN,
     _failedToResolve = failedToResolve
 };
Exemple #9
0
 public static CalculatedResult Empty(MoneyColumnMetadataJsModel item) => new CalculatedResult(item)
 {
     _ccy   = null,
     _value = double.NaN
 };
Exemple #10
0
 public static CalculatedResult Missing(MoneyColumnMetadataJsModel item) => new CalculatedResult(item)
 {
     _ccy   = null,
     _value = null
 };
Exemple #11
0
 public static CalculatedResult FromComputed(Dictionary <string, MoneyColumnMetadataJsModel> columns, MoneyColumnMetadataJsModel h, Dictionary <MoneyColumnMetadataJsModel, CalculatedResult> deps)
 {
     return(new ExpressionCalculatedResult(columns, h, deps));
 }
 public FailedToParseExpression(MoneyColumnMetadataJsModel model, string function)
 {
     _function = function;
     Value     = CalculatedResult.ResolutionFail(model, function);
 }
 public BinaryExpression(MoneyColumnMetadataJsModel model, string symbol)
 {
     _model  = model;
     _symbol = symbol;
 }
Exemple #14
0
        private static CalculateExpression Parse(Dictionary <string, MoneyColumnMetadataJsModel> columns, MoneyColumnMetadataJsModel column, string function)
        {
            CalculateExpression currentExpression = new EmptyExpression(column);

            try
            {
                while (function.Length > 0)
                {
                    function = function.Trim();

                    if (function[0] == '[')
                    {
                        var referenceName = function.Substring(1, function.IndexOf(']') - 1);

                        function = function.Remove(0, function.IndexOf(']') + 1);

                        var matchingColumn = columns[referenceName];

                        currentExpression = currentExpression.TryApply(new ReferenceExpression(matchingColumn));
                    }
                    else if (function[0] == '(')
                    {
                        var counter = 1;
                        int i;
                        for (i = 1; i < function.Length && counter > 0; i++)
                        {
                            if (function[i] == '(')
                            {
                                counter++;
                            }
                            if (function[i] == ')')
                            {
                                counter--;
                            }
                        }

                        var sub    = function.Substring(0, i);
                        var subExp = Parse(columns, column, sub.TrimStart('(').TrimEnd(')'));
                        currentExpression = currentExpression.TryApply(new ParenthesisExpression(subExp));

                        function = function.Substring(i);
                    }
                    else if (function[0] == '{')
                    {
                        var constant = function.Substring(1, function.IndexOf('}') - 1);

                        function = function.Remove(0, function.IndexOf('}') + 1);

                        currentExpression = currentExpression.TryApply(new ConstantExpression(column, constant));
                    }
                    else
                    {
                        var symbol = BinaryExpression.Symbols.FirstOrDefault(function.StartsWith);
                        if (symbol != null)
                        {
                            currentExpression = new BinaryExpression(column, symbol).TryApply(currentExpression);
                            function          = function.Substring(symbol.Length);
                        }
                        else
                        {
                            return(new FailedToParseExpression(column, function));
                        }
                    }
                }
            }
            catch
            {
                return(new FailedToParseExpression(column, function));
            }

            return(currentExpression);
        }
Exemple #15
0
        public ExpressionCalculatedResult(Dictionary <string, MoneyColumnMetadataJsModel> columns, MoneyColumnMetadataJsModel h, Dictionary <MoneyColumnMetadataJsModel, CalculatedResult> deps) : base(h)
        {
            _deps = deps;
            var expression = Parse(columns, h, h.Function);

            _expression = expression;
        }