Esempio n. 1
0
        private async void btnImport_Click(object sender, EventArgs e)
        {
            IProgress <decimal> p = new Progress <decimal>(ImportProgressUpdate);

            btnImport.Enabled = false;
            await Task.Run(() =>
            {
                var list = new List <Transaction>();
                for (int i = 0; i < Data.Count; i++)
                {
                    list.Add(Data[i].AsTransaction());

                    p.Report((decimal)i / Data.Count * 100.0m);
                }

                return(list);
            })
            .ContinueWith(f =>
            {
                return(ContextHelpers.AddTransactions(f.Result.ToArray()));
            }).Unwrap()
            .ContinueWith(v =>
            {
                btnImport.Enabled       = true;
                this.lblPercentage.Text = string.Empty;
                this.progressBar1.Value = 0;
            }, TaskScheduler.FromCurrentSynchronizationContext());
        }
Esempio n. 2
0
        public CultureSelectorResult GetCulture(HttpContextBase context)
        {
            if (context == null || ContextHelpers.IsRequestAdmin(context))
            {
                return(null);
            }

            // Attempt to determine culture by route.
            // This normally happens when you are using non standard pages that are not content items
            // {culture}/foo or ?culture={culture}
            var routeCulture = context.Request.RequestContext.RouteData.Values["culture"] ??
                               context.Request.RequestContext.HttpContext.Request.Params["culture"];

            if (routeCulture != null && !string.IsNullOrWhiteSpace(routeCulture.ToString()))
            {
                try {
                    var culture = CultureInfo.GetCultureInfo(routeCulture.ToString());
                    return(new CultureSelectorResult {
                        Priority = -3, CultureName = culture.Name
                    });
                }
                catch {}
            }

            return(null);
        }
        public void SetCulture(string culture)
        {
            var httpContext = _httpContextAccessor.Current();

            if (httpContext == null)
            {
                return;
            }

            var cookieName = ContextHelpers.IsRequestAdmin(httpContext) ? AdminCookieName : FrontEndCookieName;

            var cookie = new HttpCookie(cookieName, culture)
            {
                Expires = _clock.UtcNow.AddYears(DefaultExpireTimeYear),
            };

            if (!String.IsNullOrEmpty(_shellSettings.RequestUrlHost))
            {
                cookie.Domain = _shellSettings.RequestUrlHost;
            }

            if (!String.IsNullOrEmpty(_shellSettings.RequestUrlPrefix))
            {
                cookie.Path = GetCookiePath(httpContext);
            }

            httpContext.Request.Cookies.Remove(cookieName);
            httpContext.Response.Cookies.Remove(cookieName);
            httpContext.Response.Cookies.Add(cookie);
        }
Esempio n. 4
0
        public void BindModel_ReturnsExpectedFacebookRedirectContext()
        {
            FacebookConfiguration config = new FacebookConfiguration();

            config.AppId          = "123456";
            config.ClientProvider = new DefaultFacebookClientProvider(config);
            FacebookRedirectContextModelBinder redirectContextBinder = new FacebookRedirectContextModelBinder(config);
            ControllerContext controllerContext = ContextHelpers.CreateControllerContext(
                null,
                new NameValueCollection
            {
                { "originUrl", "https://apps.facebook.com/123456/home/index" },
                { "permissions", "email,user_likes" }
            });
            ModelBindingContext modelBindingContext = new ModelBindingContext();

            FacebookRedirectContext context = Assert.IsType <FacebookRedirectContext>(redirectContextBinder.BindModel(controllerContext, modelBindingContext));

            Assert.Equal("https://apps.facebook.com/123456/home/index", context.OriginUrl);
            Assert.Equal("https://www.facebook.com/dialog/oauth?redirect_uri=https%3A%2F%2Fapps.facebook.com%2F123456%2Fhome%2Findex&client_id=123456&scope=email%2Cuser_likes", context.RedirectUrl);
            Assert.Equal(2, context.RequiredPermissions.Length);
            Assert.Equal("email", context.RequiredPermissions[0]);
            Assert.Equal("user_likes", context.RequiredPermissions[1]);
            Assert.Same(config, context.Configuration);
        }
Esempio n. 5
0
        public async void GetData()
        {
            var data = await Task.Run(() =>
            {
                return(ContextHelpers.InvestmentsPerSource());
            });

            var model  = new PlotModel();
            var series = new PieSeries()
            {
                StrokeThickness     = 2.0,
                InsideLabelPosition = 0.5,
                AngleSpan           = 360,
                StartAngle          = 0,
                InnerDiameter       = 0.4
            };

            foreach (var d in data)
            {
                series.Slices.Add(new PieSlice(d.Source.ToString(), (double)d.Amount));
            }

            model.Series.Add(series);

            this.plotView1.Model = model;
        }
        private void MediaServiceSaving(IMediaService sender, Umbraco.Core.Events.SaveEventArgs <Umbraco.Core.Models.IMedia> e)
        {
            UmbracoContext umbContext = ContextHelpers.EnsureUmbracoContext();

            if (umbContext.Security.CurrentUser != null && (umbContext.Security.CurrentUser.UserType.Alias != "admin" && umbContext.Security.CurrentUser.StartMediaId == -1))
            {
                BackOfficeUtils.ValidateMediaUploadAccess(umbContext.Security.CurrentUser.Id, sender, e);
            }
        }
Esempio n. 7
0
        public string GetPropertyId(PropertyInfo property)
        {
            var context = this.contextResolver.GetContext(property.ReflectedType);

            if (context != null)
            {
                return(ContextHelpers.GetExpandedIri(context, property.GetJsonPropertyName()));
            }

            return(null);
        }
        public void Should_return_mapped_prefixed_term()
        {
            // given
            const string term = "xsd:integer";

            // when
            var uri = ContextHelpers.GetExpandedIri(SingleContext, term);

            // then
            uri.Should().Be(Xsd.integer);
        }
        public void Should_return_null_if_it_is_no_mapped()
        {
            // given
            const string term = "no_such_term";

            // when
            var uri = ContextHelpers.GetExpandedIri(EmptyContext, term);

            // then
            uri.Should().BeNull();
        }
        public void Should_return_directly_mapped_term()
        {
            // given
            const string term = "givenName";

            // when
            var uri = ContextHelpers.GetExpandedIri(SingleContext, term);

            // then
            uri.Should().Be(Foaf.givenName);
        }
        public void Should_return_term_mapped_to_prefixed_name()
        {
            // given
            const string term = "time_prop";

            // when
            var uri = ContextHelpers.GetExpandedIri(SingleContext, term);

            // then
            uri.Should().Be(Xsd.time);
        }
 public void InsertOrUpdate(T obj)
 {
     if (!_dbSet.Local.Contains(obj))
     {
         _dbSet.Attach(obj);
     }
     _dbSet.Add(obj);
     if (_dbSet != null)
     {
         ContextHelpers.ApplyStateChanges(db);
     }
 }
        public void Delete(T obj)
        {
            if (!_dbSet.Local.Contains(obj))
            {
                _dbSet.Attach(obj);
            }
            _dbSet.Remove(obj);

            if (_dbSet != null)
            {
                ContextHelpers.ApplyStateChanges(db);
            }
        }
        public void BindModel_ReturnsInvalidModelState_WhenSignedRequestIsNull()
        {
            FacebookConfiguration config = new FacebookConfiguration();

            config.AppSecret      = "abcdef";
            config.ClientProvider = new DefaultFacebookClientProvider(config);
            FacebookContextModelBinder contextBinder       = new FacebookContextModelBinder(config);
            ControllerContext          controllerContext   = ContextHelpers.CreateControllerContext();
            ModelBindingContext        modelBindingContext = new ModelBindingContext();

            object context = contextBinder.BindModel(controllerContext, modelBindingContext);

            Assert.Null(context);
            Assert.False(modelBindingContext.ModelState.IsValid);
        }
        /// <summary>
        /// Gets the property identifier from the @context
        /// or as concatenation of class and property name.
        /// </summary>
        public string GetPropertyId(PropertyInfo property, Uri classId)
        {
            var context = _contextResolver.GetContext(property.ReflectedType);

            if (context != null)
            {
                var mappedTerm = ContextHelpers.GetExpandedIri(context, property.GetJsonPropertyName());

                if (mappedTerm != null)
                {
                    return(mappedTerm);
                }
            }

            return(GetFallbackPropertyId(property, property.GetJsonPropertyName(), classId));
        }
        public CultureSelectorResult GetCulture(HttpContextBase context)
        {
            if (context == null || ContextHelpers.IsRequestAdmin(context))
            {
                return(null);
            }

            // Attempt to determine culture by previous route if by POST
            string path;

            if (context.Request.HttpMethod.Equals(HttpVerbs.Post.ToString(), StringComparison.OrdinalIgnoreCase))
            {
                if (context.Request.UrlReferrer != null)
                {
                    path = context.Request.UrlReferrer.AbsolutePath;
                }
                else
                {
                    return(null);
                }
            }
            else
            {
                path = context.Request.Path;
            }

            var appPath    = context.Request.ApplicationPath ?? "/";
            var requestUrl = (path.StartsWith(appPath) ? path.Substring(appPath.Length) : path).TrimStart('/');

            var prefix = _shellSettings.RequestUrlPrefix;

            if (!string.IsNullOrEmpty(prefix))
            {
                requestUrl = (requestUrl.StartsWith(prefix) ? requestUrl.Substring(prefix.Length) : requestUrl).TrimStart('/');
            }

            var content = GetByPath(requestUrl);

            if (content != null)
            {
                return(new CultureSelectorResult {
                    Priority = -2, CultureName = _localizationService.Value.GetContentCulture(content)
                });
            }

            return(null);
        }
Esempio n. 17
0
        private Task <HttpResponseMessage> HandleListViewStartNodes(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            // do at root in the media section or in the picker when it should be limited
            if (request.RequestUri.Query.Contains("id=-1") && (request.RequestUri.Query.Contains("pageNumber=1") || Settings.LimitPickersToStartNodes))
            {
                IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser;
                ApplicationContext appContext = ContextHelpers.EnsureApplicationContext();
                int[] startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id, appContext, appContext.DatabaseContext).Media;

                if (user.UserType.Alias == "admin" || startNodes == null)
                {
                    return(base.SendAsync(request, cancellationToken));
                }

                return(base.SendAsync(request, cancellationToken)
                       .ContinueWith(task =>
                {
                    HttpResponseMessage response = task.Result;
                    if (!response.IsSuccessStatusCode)
                    {
                        return response;
                    }
                    try
                    {
                        HttpContent data = response.Content;
                        ObjectContent dataContent = ((ObjectContent)(data));

                        int itemCount = startNodes.Length;
                        IMedia[] startIMedia = appContext.Services.MediaService.GetByIds(startNodes).ToArray();

                        var pagedResult = new PagedResult <ContentItemBasic <ContentPropertyBasic, IMedia> >(itemCount, 1, itemCount);
                        pagedResult.Items = startIMedia
                                            .Select(Mapper.Map <IMedia, ContentItemBasic <ContentPropertyBasic, IMedia> >);

                        dataContent.Value = pagedResult;
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Error <WebApiHandler>("Could not replace start nodes.", ex);
                    }
                    return response;
                }
                                     ));
            }
            return(base.SendAsync(request, cancellationToken));
        }
Esempio n. 18
0
        private Task <HttpResponseMessage> RemoveInaccessibleNodesFromSearchResults(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser;
            StartNodeCollection startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id);

            if (user.UserType.Alias == "admin")
            {
                return(base.SendAsync(request, cancellationToken));
            }

            return(base.SendAsync(request, cancellationToken)
                   .ContinueWith(task =>
            {
                HttpResponseMessage response = task.Result;
                if (!response.IsSuccessStatusCode)
                {
                    return response;
                }
                try
                {
                    HttpContent data = response.Content;
                    ObjectContent dataContent = ((ObjectContent)(data));
                    IEnumerable <EntityTypeSearchResult> entities = dataContent.Value as IEnumerable <EntityTypeSearchResult>;

                    EntityTypeSearchResult contentResults = entities.FirstOrDefault(e => e.EntityType == "Document");
                    EntityTypeSearchResult mediaResults = entities.FirstOrDefault(e => e.EntityType == "Media");

                    if (startNodes.Content != null && contentResults.Results.Any())
                    {
                        contentResults.Results = contentResults.Results.Where(e => PathContainsAStartNode(e.Path, startNodes.Content));
                    }

                    if (startNodes.Media != null && mediaResults.Results.Any())
                    {
                        mediaResults.Results = mediaResults.Results.Where(e => PathContainsAStartNode(e.Path, startNodes.Media));
                    }
                }
                catch (Exception ex)
                {
                    LogHelper.Error <WebApiHandler>("Could not remove inaccessible nodes from search results.", ex);
                }
                return response;
            }
                                 ));
        }
Esempio n. 19
0
        public void MarshalConfigTests(Type type, bool marshalEnable, bool marshalSerialize, bool marshalParse)
        {
            ITypeModel typeModel = RuntimeTypeModel.CreateFrom(type);
            var        tm        = Assert.IsType <ValueStructTypeModel>(typeModel);

            Assert.Equal(marshalSerialize, tm.CanMarshalOnSerialize);
            Assert.Equal(marshalParse, tm.CanMarshalOnParse);

            var options = new FlatBufferSerializerOptions {
                EnableValueStructMemoryMarshalDeserialization = marshalEnable
            };

            CodeGeneratedMethod serializeMethod = tm.CreateSerializeMethodBody(ContextHelpers.CreateSerializeContext(options));
            CodeGeneratedMethod parseMethod     = tm.CreateParseMethodBody(ContextHelpers.CreateParserContext(options));

            Assert.Equal(parseMethod.MethodBody.Contains("MemoryMarshal.Cast"), marshalEnable && marshalParse);
            Assert.Equal(serializeMethod.MethodBody.Contains("MemoryMarshal.Cast"), marshalEnable && marshalSerialize);
        }
Esempio n. 20
0
        public static GetRuleValue GetRulesEvaluator(IdentityHashSet identities, GetLoadedContextByIdentityType contextByIdentity, GetRule getRule)
        {
            var identityTypes  = identities.Select(x => x.Type).ToArray();
            var flattenContext = ContextHelpers.FlattenLoadedContext(contextByIdentity);

            GetRuleValue    getRuleValue     = null;
            GetContextValue recursiveContext = key =>
            {
                if (key.StartsWith("@@key:"))
                {
                    key = key.Replace("@@key:", "keys.");
                }
                if (!key.StartsWith("keys."))
                {
                    return(Option <JsonValue> .None);
                }
                var path = new ConfigurationPath(key.Split('.')[1]);
                return(getRuleValue(path).Map(x => x.Value));
            };

            var context = ContextHelpers.Merge(flattenContext, recursiveContext);

            getRuleValue = Memoize(path =>
            {
                try
                {
                    foreach (var identity in identityTypes)
                    {
                        var fixedResult = ContextHelpers.GetFixedConfigurationContext(context, identity)(path);
                        if (fixedResult.IsSome)
                        {
                            return(fixedResult);
                        }
                    }

                    return(getRule(path).Bind(x => x.GetValue(context)));
                }
                catch (Exception e)
                {
                    return(ConfigurationValue.Error(e));
                }
            });
            return(getRuleValue);
        }
Esempio n. 21
0
        public void BindModel_ReturnsInvalidModelState_WhenPermissionsIsNull()
        {
            FacebookConfiguration config = new FacebookConfiguration();

            config.AppId          = "123456";
            config.ClientProvider = new DefaultFacebookClientProvider(config);
            FacebookRedirectContextModelBinder redirectContextBinder = new FacebookRedirectContextModelBinder(config);
            ControllerContext controllerContext = ContextHelpers.CreateControllerContext(
                null,
                new NameValueCollection
            {
                { "originUrl", "https://apps.facebook.com/123456/home/index" }
            });
            ModelBindingContext modelBindingContext = new ModelBindingContext();

            FacebookRedirectContext context = Assert.IsType <FacebookRedirectContext>(redirectContextBinder.BindModel(controllerContext, modelBindingContext));

            Assert.False(modelBindingContext.ModelState.IsValid);
        }
        public void BindModel_ReturnsExpectedFacebookContext_WhenSignedRequestComesFromForm()
        {
            FacebookConfiguration config = new FacebookConfiguration();

            config.AppSecret      = "3e29b24f825e737d97aed5eb62df5076";
            config.ClientProvider = new DefaultFacebookClientProvider(config);
            FacebookContextModelBinder contextBinder     = new FacebookContextModelBinder(config);
            ControllerContext          controllerContext = ContextHelpers.CreateControllerContext(new NameValueCollection
            {
                { "signed_request", "x1yDEgacN3N5iu23Ji8NLYp9LGO1-cUXKHTJQrMqzVQ.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImV4cGlyZXMiOjEzNTM5MTMyMDAsImlzc3VlZF9hdCI6MTM1MzkwNzQ5Miwib2F1dGhfdG9rZW4iOiJBQUFGUlJPcWtwZ01CQURBSjNQZk5vNldXMlJ5WkFSQ1hjU0daQlhpNTBLTG9wRzFwYmFwc2M2aThKY3h6WkFQN1pDSnlpcXVHYlc3WXlCam1aQjh0UWpyelZ2VTNrYm44b3N3WXR5czkzTWdaRFpEIiwidXNlciI6eyJjb3VudHJ5IjoidXMiLCJsb2NhbGUiOiJlbl9VUyIsImFnZSI6eyJtaW4iOjIxfX0sInVzZXJfaWQiOiIxNzgyNTkwMSJ9" }
            });
            ModelBindingContext modelBindingContext = new ModelBindingContext();

            FacebookContext context = Assert.IsType <FacebookContext>(contextBinder.BindModel(controllerContext, modelBindingContext));

            Assert.NotNull((object)context.SignedRequest);
            Assert.NotNull(context.AccessToken);
            Assert.Equal("17825901", context.UserId);
        }
        public bool Undo(string packageName, XmlNode xmlData)
        {
            try
            {
                ApplicationContext   appContext           = ContextHelpers.EnsureApplicationContext();
                DatabaseSchemaHelper databaseSchemaHelper = new DatabaseSchemaHelper(appContext.DatabaseContext.Database, ContextHelpers.EnsureApplicationContext().ProfilingLogger.Logger, appContext.DatabaseContext.SqlSyntax);

                databaseSchemaHelper.DropTable <UserStartNodes>();

                return(true);
            }
            catch (Exception ex)
            {
                var message = string.Concat("Error at undo ", this.Alias(), " package action: ", ex);
                LogHelper.Error(typeof(CreateDatabase), message, ex);
            }

            return(false);
        }
Esempio n. 24
0
        private Task <HttpResponseMessage> RemoveInaccessibleNodesFromContentSearchResults(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (!request.RequestUri.Query.ToLower().Contains("type=document"))
            {
                return(base.SendAsync(request, cancellationToken));
            }

            IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser;

            int[] startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id).Content;

            if (user.UserType.Alias == "admin" || startNodes == null)
            {
                return(base.SendAsync(request, cancellationToken));
            }

            return(base.SendAsync(request, cancellationToken)
                   .ContinueWith(task =>
            {
                HttpResponseMessage response = task.Result;
                if (!response.IsSuccessStatusCode)
                {
                    return response;
                }
                try
                {
                    HttpContent data = response.Content;
                    ObjectContent dataContent = ((ObjectContent)(data));
                    IEnumerable <EntityBasic> entities = dataContent.Value as IEnumerable <EntityBasic>;

                    entities = entities.Where(e => PathContainsAStartNode(e.Path, startNodes));

                    dataContent.Value = entities;
                }
                catch (Exception ex)
                {
                    LogHelper.Error <WebApiHandler>("Could not remove inaccessible nodes from search results.", ex);
                }
                return response;
            }
                                 ));
        }
        public CultureSelectorResult GetCulture(HttpContextBase context)
        {
            if (context == null)
            {
                return(null);
            }

            var cookieName = ContextHelpers.IsRequestAdmin(context) ? AdminCookieName : FrontEndCookieName;

            var cookie = context.Request.Cookies.Get(cookieName);

            if (cookie != null)
            {
                return new CultureSelectorResult {
                           Priority = -1, CultureName = cookie.Value
                }
            }
            ;

            return(null);
        }
Esempio n. 26
0
        private Task <HttpResponseMessage> HandleRootChildFolders(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            if (request.RequestUri.Query.Contains("id=-1"))
            {
                IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser;
                ApplicationContext appContext = ContextHelpers.EnsureApplicationContext();
                int[] startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id, appContext, appContext.DatabaseContext).Media;

                if (user.UserType.Alias == "admin" || startNodes == null)
                {
                    return(base.SendAsync(request, cancellationToken));
                }

                return(base.SendAsync(request, cancellationToken)
                       .ContinueWith(task =>
                {
                    HttpResponseMessage response = task.Result;
                    if (!response.IsSuccessStatusCode)
                    {
                        return response;
                    }
                    try
                    {
                        HttpContent data = response.Content;
                        ObjectContent dataContent = ((ObjectContent)(data));

                        IEnumerable <int> folderTypes = appContext.Services.ContentTypeService.GetAllMediaTypes().ToArray().Where(x => x.Alias.EndsWith("Folder")).Select(x => x.Id);
                        IMedia[] children = appContext.Services.MediaService.GetByIds(startNodes).ToArray();
                        dataContent.Value = children.Where(x => folderTypes.Contains(x.ContentTypeId)).Select(Mapper.Map <IMedia, ContentItemBasic <ContentPropertyBasic, IMedia> >);
                    }
                    catch (Exception ex)
                    {
                        LogHelper.Error <WebApiHandler>("Could not replace start nodes.", ex);
                    }
                    return response;
                }
                                     ));
            }
            return(base.SendAsync(request, cancellationToken));
        }
Esempio n. 27
0
        private Task <HttpResponseMessage> RemoveInacessibleContentNodesFromPath(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            IUser user = ContextHelpers.EnsureUmbracoContext().Security.CurrentUser;

            int[] startNodes = StartNodeRepository.GetCachedStartNodesByUserId(user.Id).Content;

            if (user.UserType.Alias == "admin" || startNodes == null)
            {
                return(base.SendAsync(request, cancellationToken));
            }

            return(base.SendAsync(request, cancellationToken)
                   .ContinueWith(task =>
            {
                HttpResponseMessage response = task.Result;
                if (!response.IsSuccessStatusCode)
                {
                    return response;
                }
                try
                {
                    HttpContent data = response.Content;
                    ContentItemDisplay content = ((ObjectContent)(data)).Value as ContentItemDisplay;

                    if (!PathContainsAStartNode(content.Path, startNodes))
                    {
                        response.StatusCode = HttpStatusCode.Forbidden;     // prevent users from editing a node they shouldn't
                    }

                    content.Path = RemoveStartNodeAncestors(content.Path, startNodes);
                }
                catch (Exception ex)
                {
                    LogHelper.Error <WebApiHandler>("Could not update path.", ex);
                }
                return response;
            }
                                 ));
        }
Esempio n. 28
0
        public DateTime?[] MaxRange()
        {
            DateTime?lowest  = DateTime.Now;
            DateTime?highest = DateTime.Now;

            foreach (var dt in ContextHelpers.GetRange())
            {
                var low = dt.Value[0].Value;
                if (low < lowest)
                {
                    lowest = low;
                }

                var high = dt.Value[1].Value;
                if (high > highest)
                {
                    highest = high;
                }
            }

            return(new DateTime?[2] {
                lowest, highest
            });
        }
Esempio n. 29
0
        public async Task <object[]> GetSeries(DateTime from, DateTime to)
        {
            return(await Task.Run(() =>
            {
                var dateRange = Enumerable.Range(0, 1 + to.Subtract(from).Days)
                                .Select(offset => from.AddDays(offset))
                                .ToArray();

                var data = ContextHelpers.GetTransactions(GetTransactionSource(), from, to);

                var rentPerDay = new LineSeries()
                {
                    Title = GetLineSeriesName(Resources.RENT_DAY),
                    Smooth = true
                };

                var serieInterestTotal = new LineSeries()
                {
                    Title = GetLineSeriesName(Resources.RENT_TOTAL)
                };

                var serieBalance = new LineSeries()
                {
                    Title = GetLineSeriesName(Resources.BALANCE)
                };

                var serieInvestment = new LineSeries()
                {
                    Title = GetLineSeriesName(Resources.INVESTMENTS)
                };

                var serieDeposits = new LineSeries()
                {
                    Title = GetLineSeriesName("Deposits")
                };

                var serieYield = new LineSeries()
                {
                    Title = GetLineSeriesName("Yield"),
                    Smooth = true
                };

                var serieXirr = new LineSeries()
                {
                    Title = GetLineSeriesName("Xirr")
                };

                var dataForIRR =
                    data.Where(f => f.TransactionType == TransactionType.Interest || f.TransactionType == TransactionType.Investment || f.TransactionType == TransactionType.Principal);

                foreach (var date in dateRange)
                {
                    var transToday = data.Where(tr => tr.Date.Value.Date == date.Date).OrderBy(d => d.Date.Value);
                    double timestamp = OxyPlot.Axes.DateTimeAxis.ToDouble(date.Date);

                    var transactionsInterestToday = transToday.Where(t => t.TransactionType == TransactionType.Interest).Sum(f => f.Amount);
                    rentPerDay.Points.Add(new OxyPlot.DataPoint(timestamp, Convert.ToDouble(transactionsInterestToday)));

                    var sumInterest = data.Where(tr => tr.Date.Value.Date <= date.Date && tr.TransactionType == TransactionType.Interest).Sum(tr => tr.Amount);
                    serieInterestTotal.Points.Add(new OxyPlot.DataPoint(timestamp, Convert.ToDouble(sumInterest)));

                    var transactionBalance = transToday.Any() ? transToday.Last().Balance.Value : data.Where(f => f.Balance.HasValue && f.Date.Value <= date.Date).Any() ? data.Where(f => f.Balance.HasValue && f.Date.Value <= date.Date).Last().Balance : 0;
                    if (transactionBalance.HasValue)
                    {
                        serieBalance.Points.Add(new OxyPlot.DataPoint(timestamp, Convert.ToDouble(transactionBalance)));
                    }

                    decimal investmentsBalance = transToday.Where(t => t.TransactionType == TransactionType.Investment).Sum(f => f.Amount);
                    serieInvestment.Points.Add(new OxyPlot.DataPoint(timestamp, Convert.ToDouble(investmentsBalance)));

                    decimal desposits = transToday.Where(t => t.TransactionType == TransactionType.Deposit).Sum(f => f.Amount);
                    serieDeposits.Points.Add(new OxyPlot.DataPoint(timestamp, Convert.ToDouble(desposits)));

                    // Yield
                    var deposits = data.Where(f => f.Date.Value.Date <= date.Date && f.TransactionType == TransactionType.Deposit).Sum(f => f.Amount);
                    var withdraws = data.Where(f => f.Date.Value.Date <= date.Date && f.TransactionType == TransactionType.Withdraw).Sum(f => f.Amount);
                    var rent = data.Where(f => f.Date.Value.Date <= date.Date && f.TransactionType == TransactionType.Interest).Sum(f => f.Amount);
                    var totalAsset = deposits - withdraws;

                    if (totalAsset != 0)
                    {
                        serieYield.Points.Add(new OxyPlot.DataPoint(timestamp, Convert.ToDouble(rent / totalAsset) * 100));
                    }

                    // xirr
                    var gr = dataForIRR.Where(f => f.Date.Value <= date.Date)
                             .GroupBy(f => f.LoanId, (v, y) =>
                                      new
                    {
                        transactions = y,
                        done = y.Where(f => f.TransactionType != TransactionType.Investment).Sum(f => f.Amount) > (y.First(f => f.TransactionType == TransactionType.Investment).Amount * -1),
                        loanId = v,
                        xiir = y.Any(f => f.TransactionType == TransactionType.Investment) && y.Any(f => f.TransactionType == TransactionType.Interest || f.TransactionType == TransactionType.Principal) && y.Where(f => f.TransactionType != TransactionType.Investment).Sum(f => f.Amount) > (y.First(f => f.TransactionType == TransactionType.Investment).Amount * -1) ? IRR(y.Select(f => f.Amount), y.Select(f => f.Date.Value)) : null
                    }).Where(f => f.done && f.xiir.HasValue);


                    if (gr.Any())
                    {
                        serieXirr.Points.Add(new OxyPlot.DataPoint(timestamp, gr.Average(v => v.xiir.Value)));
                    }
                }

                return new object[5] {
                    rentPerDay,
                    serieInterestTotal,
                    serieBalance,
                    //serieInvestment,
                    //serieDeposits,
                    serieYield,
                    serieXirr
                };
            }));
        }
Esempio n. 30
0
 public DateTime?[] MaxRange()
 {
     return(ContextHelpers.GetRange()[TransactionSource.Grupeer]);
 }