public List <Subscription> GetSubscriptions(string userEmail, string order = null)
        {
            var userId  = GetUser(userEmail).Id;
            var subsIds = UserSubscriptions
                          .Where(x => x.UserId == userId)
                          .Select(x => x.SubscriptionId);
            var subs = Subscriptions
                       .Where(s => subsIds.Any(id => id == s.Id));

            foreach (var s in subs)
            {
                while ((s.LastPayment + TimeSpan.FromDays(s.Period)).Date < DateTime.Today)
                {
                    s.LastPayment += TimeSpan.FromDays(s.Period);
                }
            }
            SaveChanges();
            if (order == "descendingDate")
            {
                return(subs.ToList().OrderByDescending(x => x.LastPayment + TimeSpan.FromDays(x.Period)).ToList());
            }
            if (order == "ascendingName")
            {
                return(subs.ToList().OrderBy(x => x.Name).ToList());
            }
            if (order == "descendingName")
            {
                return(subs.ToList().OrderByDescending(x => x.Name).ToList());
            }
            return(subs.ToList().OrderBy(x => x.LastPayment + TimeSpan.FromDays(x.Period)).ToList());
        }
        public override void Initialize(IApplicationContext applicationContext)
        {
            base.Initialize(applicationContext);
            statusBarViewModel = this.ApplicationContext.GetService <StatusBarViewModel>();

            var cachedintegrationAccountDetails = this.ApplicationContext.GetService <IntegrationAccountDetails>();
            var cachedintegrationServiceDetails = this.ApplicationContext.GetService <IntegrationServiceDetails>();

            AzureLoginButtonClickCommand = new RelayCommand(o => AzureLoginButtonClick("AzureLoginButton"));

            if (cachedintegrationAccountDetails != null)
            {
                UserSubscriptions       = this.ApplicationContext.GetProperty("Subscriptions") as ObservableCollection <Subscription.RootObject>;
                UserResourceGroups      = this.ApplicationContext.GetProperty("ResourceGroups") as ObservableCollection <ResourceGroup.RootObject>;
                UserIntegrationAccounts = this.ApplicationContext.GetProperty("IntegrationAccounts") as ObservableCollection <IntegrationAccount.RootObject>;
                UserKeyVaults           = this.ApplicationContext.GetProperty("KeyVaults") as ObservableCollection <KeyVault.RootObject>;

                SelectedSubscription       = UserSubscriptions.Where(x => x.SubscriptionId == cachedintegrationAccountDetails.SubscriptionId).First();
                SelectedResourceGroup      = UserResourceGroups.Where(x => x.Name == cachedintegrationAccountDetails.ResourceGroupName).First();
                SelectedIntegrationAccount = UserIntegrationAccounts.Where(x => x.Name == cachedintegrationAccountDetails.IntegrationAccountName).First();
                if (!string.IsNullOrEmpty(cachedintegrationAccountDetails.KeyVaultName))
                {
                    SelectedKeyVault = UserKeyVaults.Where(x => x.Name == cachedintegrationAccountDetails.KeyVaultName).First();
                }
                IsLoginButttonEnabled = false;
                SubscriptionVisible   = true;
            }
            else
            {
                UserSubscriptions       = new ObservableCollection <Subscription.RootObject>();
                UserResourceGroups      = new ObservableCollection <ResourceGroup.RootObject>();
                UserIntegrationAccounts = new ObservableCollection <IntegrationAccount.RootObject>();
                UserKeyVaults           = new ObservableCollection <KeyVault.RootObject>();

                IsLoginButttonEnabled     = true;
                SubscriptionVisible       = false;
                ResourceGroupVisible      = false;
                IntegrationAccountVisible = false;
                KeyVaultVisible           = false;
            }
            if (cachedintegrationServiceDetails != null)
            {
                this.integrationServiceDetails = cachedintegrationServiceDetails;
            }
            else
            {
                this.integrationServiceDetails = new IntegrationServiceDetails();
                this.ApplicationContext.AddService(this.integrationServiceDetails);
            }
        }