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());
        }
Esempio n. 2
0
        /// <summary>
        /// Currents the users subscriptions.
        /// </summary>
        /// <param name="showActiveOnly">if set to <c>true</c> [show active only].</param>
        /// <returns></returns>
        public UserSubscriptions CurrentUsersSubscriptions(bool showActiveOnly = false)
        {
            try
            {
                #region pre-processing

                string additionalQuery = string.Empty;

                if (showActiveOnly)
                {
                    additionalQuery = "?active=true";
                }

                #endregion end pre-processing

                #region processing

                UserSubscriptions result = new UserSubscriptions();
                var basicResult          = GetRequest <BasicUserSubscriptions>(string.Concat(PushbulletConstants.BaseUrl, PushbulletConstants.SubscriptionUrls.Subscriptions, additionalQuery).Trim());
                foreach (var sub in basicResult.Subscriptions)
                {
                    result.Subscriptions.Add(ConvertFromBasicSubscription(sub));
                }
                return(result);

                #endregion processing
            }
            catch (Exception)
            {
                throw;
            }
        }
        private async Task <UserSubscriptions> GetUserSubscriptions(string emailAddress, string accessToken)
        {
            UserSubscriptions userSubscriptions = null;

            User user = await GetUser(emailAddress, accessToken);

            if (user != null)
            {
                string url = $"{_apimUrl}/users/{user.name}/subscriptions?api-version=2019-12-01";
                _httpClient.DefaultRequestHeaders.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("SharedAccessSignature", accessToken);
                HttpResponseMessage response = await _httpClient.GetAsync(url);

                if (response.IsSuccessStatusCode)
                {
                    string responseContent = await response.Content.ReadAsStringAsync();

                    userSubscriptions = JsonConvert.DeserializeObject <UserSubscriptions>(responseContent);
                }
                else
                {
                    string responseContent = await response.Content.ReadAsStringAsync();
                }
            }

            return(userSubscriptions);
        }
Esempio n. 4
0
        public async Task <bool> Post(UserSubscriptions userSubscriptions)
        {
            var subscriptions = userSubscriptions.Subscriptions;

            if (!subscriptions.Any())
            {
                return(false);
            }

            int id = subscriptions[0].UserId;

            if (subscriptions.Any(x => x.UserId != id))
            {
                return(false);
            }

            // remove all subscriptions that user chose to remove
            var subscriptionsToDelete = subscriptions.Where(x => !x.IsActive).ToList();

            if (subscriptionsToDelete.Any())
            {
                await userSubscriptionRepository.RemoveSubscriptions(subscriptionsToDelete);
            }

            // add all subscriptions that user now has active
            var subscriptionsToAdd = subscriptions.Where(x => x.IsActive).ToList();

            if (subscriptionsToAdd.Any())
            {
                await userSubscriptionRepository.AddSubscriptions(subscriptionsToAdd);
            }

            return(true);
        }
Esempio n. 5
0
        public async Task <IActionResult> Register(UserSubscriptions UserSubscriptions)
        {
            //var userWithSameEmail = _dbContext.ADMINMast.SingleOrDefault(u => u.EmailID == ADMINMast.EmailID);
            //if (userWithSameEmail != null) return BadRequest("User with this email already exists");
            var UserSubscriptionsObj = new UserSubscriptions
            {
                UserSubscriptionID    = Guid.NewGuid(),
                DiscountApplied       = UserSubscriptions.DiscountApplied,
                FamMembID             = UserSubscriptions.FamMembID,
                ItemAddOnQty          = UserSubscriptions.ItemAddOnQty,
                ItemID                = UserSubscriptions.ItemID,
                OfferID               = UserSubscriptions.OfferID,
                Quantity              = UserSubscriptions.Quantity,
                ScheduledDates        = UserSubscriptions.ScheduledDates,
                ScheduledTime         = UserSubscriptions.ScheduledTime,
                SubSchID              = UserSubscriptions.SubSchID,
                SubscriptionEndDate   = UserSubscriptions.SubscriptionEndDate,
                SubscriptionPrice     = UserSubscriptions.SubscriptionPrice,
                SubscriptionStartDate = UserSubscriptions.SubscriptionStartDate,
                userId                = UserSubscriptions.userId
            };

            _dbContext.UserSubscriptions.Add(UserSubscriptionsObj);
            await _dbContext.SaveChangesAsync();

            return(StatusCode(StatusCodes.Status201Created));
        }
 public void Update(UserSubscriptions sub)
 {
     using (IDbConnection dbConnection = Connection)
     {
         dbConnection.Open();
         dbConnection.Execute("team4.UpdateSubscription", sub, commandType: CommandType.StoredProcedure);
     }
 }
Esempio n. 7
0
        public static async Task GetRandomActivationCode(this UserSubscriptions userSubscription)
        {
            var crypto = new System.Security.Cryptography.RNGCryptoServiceProvider();
            var bytes  = new byte[5];

            crypto.GetBytes(bytes);
            userSubscription.ActivationCode = BitConverter.ToString(bytes).Replace("-", string.Empty);
        }
Esempio n. 8
0
 private Result.Result <Boolean> UpdateUserSubscriptionStatus(string key, Core.SubscriptionEnum status)
 {
     if (!UserSubscriptions.ContainsKey(key))
     {
         return(new Result.Result <Boolean>(new SystemException(Extensions.DataConstants.FailedToFind)));
     }
     UserSubscriptions[key].SetStatus(status);
     return(new Result.Result <Boolean>(true));
 }
        public Task <Guid> Handle(CreateUserSubscriptionCommand request, CancellationToken cancellationToken)
        {
            UserSubscriptions subscription = UserSubscriptions.Create(request.SubscriptionId, request.UserId, request.APIKey);

            _subscriptionRepository.Save(subscription);
            _unitOfWork.Save();

            return(Task.FromResult <Guid>(subscription.Id));
        }
Esempio n. 10
0
        public bool AddSubscription(string curentUserId, string userId)
        {
            var subscription = new UserSubscriptions {
                UserId = curentUserId, SubscribedToUserId = userId
            };

            Context.Set <UserSubscriptions>().Add(subscription);
            Context.Entry(subscription).State = EntityState.Added;
            return(Context.SaveChanges() > 0);
        }
        public async void Delete(string id)
        {
            var httpClient      = Helpers.CouchDBConnect.GetClient("UserSubscripton");
            UserSubscriptions u = await DoesSubscriptionExist(id);

            if (u != null)
            {
                await httpClient.DeleteAsync("UserSubscripton/" + u._id + "?rev=" + u._rev);
            }
        }
Esempio n. 12
0
 public void AddServiceToUser(Subscription subscription, string userEmail)
 {
     Subscriptions.Add(subscription);
     SaveChanges();
     UserSubscriptions.Add(new UserSubscription()
     {
         UserId         = GetUser(userEmail).Id,
         SubscriptionId = subscription.Id
     });
     SaveChanges();
 }
 public int Insert(int streamerId)
 {
     using (IDbConnection dbConnection = Connection)
     {
         UserSubscriptions sub = new UserSubscriptions
         {
             StreamerId  = streamerId,
             UserLoginId = 2
         };
         dbConnection.Open();
         return(dbConnection.Query <InsertID>("team4.AddSubscription", sub, commandType: CommandType.StoredProcedure)?.FirstOrDefault()?.ID ?? 0);
     }
 }
        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);
            }
        }
Esempio n. 15
0
        public Task <Guid> Handle(EditUserSubscriptionCommand request, CancellationToken cancellationToken)
        {
            UserSubscriptions subscription = _subscriptionRepository.Find(request.Id);

            if (subscription == null)
            {
                throw new Exception(typeof(UserSubscriptions).Name + " not found.");
            }

            subscription.Edit(request.SubcriptionId, request.UserId, request.APIKey);
            _unitOfWork.Save();

            return(Task.FromResult(subscription.Id));
        }
Esempio n. 16
0
        public async Task <UserSubscriptions> Get(int id)
        {
            if (id <= 0)
            {
                return(new UserSubscriptions());
            }

            // Return a static list of people
            var subscriptions = await userSubscriptionRepository.FetchSubscriptions(id);

            UserSubscriptions userSubscriptionsToSave = new UserSubscriptions();

            userSubscriptionsToSave.Subscriptions = subscriptions.ToList();
            return(userSubscriptionsToSave);
        }
Esempio n. 17
0
        public async Task Update(UserSubscriptions userSubscription)
        {
            var userSubs = await _context.UserSubscriptions
                           .FirstOrDefaultAsync(x => x.UserId == userSubscription.UserId && x.GuildId == userSubscription.GuildId)
                           .ConfigureAwait(false);

            userSubs.Works     = userSubscription.Works;
            userSubs.Training  = userSubscription.Training;
            userSubs.Adventure = userSubscription.Adventure;

            _context.UserSubscriptions.Attach(userSubs);
            _context.Entry(userSubs).State = EntityState.Modified;

            await _context.SaveChangesAsync().ConfigureAwait(false);
        }
Esempio n. 18
0
        public async Task <UserSubscriptions> GetUserSubscriptions(string session, bool onlyAppSubscriptions)
        {
            var userId = await GetUserFromSession(session);

            var result = new UserSubscriptions()
            {
                Subscriptions = new List <Models.Subscription>()
            };

            string sqlQuery = $@"SELECT 
    SUS_titulosaudio.id AS id_suscription,
    SUS_titulosaudio.des_corta AS suscription_code,
    SUS_titulosaudio.descripcion AS suscription_description
FROM  SUS_audio, SUS_titulosaudio
WHERE SUS_audio.id_usuario={userId} AND
SUS_titulosaudio.id = SUS_audio.id_titulo";

            // Only subscriptions for app list
            if (onlyAppSubscriptions)
            {
                sqlQuery += " AND SUS_audio.id_formato = 5";
            }

            using (SqlConnection connection = new SqlConnection(
                       _connectionString))
            {
                SqlCommand commandDeatils = new SqlCommand(sqlQuery, connection);

                connection.Open();

                using SqlDataReader reader = await commandDeatils.ExecuteReaderAsync();

                while (reader.Read())
                {
                    result.Subscriptions.Add(new Models.Subscription
                    {
                        Id          = Convert.ToInt32(reader[0]),
                        Code        = reader[1].ToString().Trim(),
                        Description = reader[2].ToString().Trim()
                    });
                }
            }

            return(result);
        }
Esempio n. 19
0
        public Task <UserSubcriptionReadModel> Handle(UserSubscriptionDetailQuery request, CancellationToken cancellationToken)
        {
            UserSubscriptions        subscription          = _subscriptionRepository.Find(request.Id);
            UserSubcriptionReadModel subscriptionReadModel = null;

            if (subscription != null)
            {
                subscriptionReadModel = new UserSubcriptionReadModel
                {
                    Id            = subscription.Id,
                    APIKey        = subscription.APIKey,
                    SubcriptionId = subscription.SubcriptionId,
                    UserId        = subscription.UserId
                };
            }

            return(Task.FromResult(subscriptionReadModel));
        }
        public void UserSubscriptionsCreatedSuccessfully()
        {
            var _userSubscriptionsRepository = StartUpTests.ServiceProvider.GetService <IUserSubscriptionsRepository>();

            Guid userId         = Guid.NewGuid();
            Guid subscriptionId = Guid.NewGuid();
            UserSubscriptions userSubscription = UserSubscriptions.Create(subscriptionId, userId, "KKKL");

            _userSubscriptionsRepository.Save(userSubscription);
            StartUpTests.UnitOfWork.Save();
            Assert.IsNotNull(userSubscription.Id);

            UserSubscriptions userSubscriptionRead = _userSubscriptionsRepository.Find(userSubscription.Id);

            Assert.IsNotNull(userSubscriptionRead);
            Assert.AreEqual(userId, userSubscriptionRead.UserId);
            Assert.AreEqual(subscriptionId, userSubscriptionRead.SubcriptionId);
        }
Esempio n. 21
0
        public async Task UpdateUserProfileForSubscriptions(Agreement createdAgreement, string paypalPlanId)
        {
            var user = await _userManager.GetUserAsync(User);

            //add all subscriptions as Payment already has happened!!

            UserSubscriptions subscriptionToUpdate = _dbContext.UserSubscriptions.Where(x => x.PayPalPlanId == paypalPlanId && x.UserId == user.Id).FirstOrDefault();

            if (user != null && subscriptionToUpdate != null)
            {
                subscriptionToUpdate.PayPalAgreementId = createdAgreement.Id;
                subscriptionToUpdate.SubscriptionId    = createdAgreement.Id;
                subscriptionToUpdate.State             = createdAgreement.State;
                subscriptionToUpdate.Description       = createdAgreement.Description;
                subscriptionToUpdate.PayerEmail        = createdAgreement.Payer.PayerInfo.Email;
                subscriptionToUpdate.PayerFirstName    = createdAgreement.Payer.PayerInfo.FirstName;
                subscriptionToUpdate.PayerLastName     = createdAgreement.Payer.PayerInfo.LastName;

                await _dbContext.SaveChangesAsync();
            }
        }
Esempio n. 22
0
        /// <summary>
        /// Get the current user's subscriptions.
        /// </summary>
        /// <returns></returns>
        public UserSubscriptions CurrentUsersSubscriptions()
        {
            try
            {
                #region processing

                UserSubscriptions result     = new UserSubscriptions();
                string            jsonResult = GetRequest(string.Concat(PushbulletConstants.BaseUrl, PushbulletConstants.SubscriptionUrls.Subscriptions));
                var basicResult = JsonSerializer.Deserialize <BasicUserSubscriptions>(jsonResult);
                foreach (var sub in basicResult.subscriptions)
                {
                    result.Subscriptions.Add(ConvertFromBasicSubscription(sub));
                }
                return(result);

                #endregion processing
            }
            catch (Exception)
            {
                throw;
            }
        }
        public async Task <int> RemoveSubscribee([FromBody] Subscription subscription)
        {
            Subscribee          sub        = null;
            var                 httpClient = Helpers.CouchDBConnect.GetClient("subscriptions");
            HttpContent         httpContent;
            HttpResponseMessage response;
            UserSubscriptions   u = await DoesSubscriptionExist(subscription.id);

            if (u != null)
            {
                u.RemoveSubscribee(sub);
                httpContent = new StringContent(
                    JsonConvert.SerializeObject(u),
                    System.Text.Encoding.UTF8,
                    "application/json"
                    );

                response = await httpClient.PutAsync("subscriptions/" + u._id, httpContent);

                return(1);
            }

            return(-1);
        }
        protected override async void OnAppearing()
        {
            if (_model.Loading)
            {
                UserDialogs.Instance.ShowLoading("Cargando suscripciones");

                try
                {
                    _subscriptions = await AudioLibrary.Instance.GetUserSubscriptions(true);

                    if (_subscriptions == null)
                    {
                        return;
                    }

                    // bind model
                    listView.SetBinding(ListView.ItemsSourceProperty, new Binding("."));
                    listView.BindingContext = _model.Items;
                    listView.BeginRefresh();

                    _subscriptions.Subscriptions
                    .OrderBy(o => o.Description)
                    .ToList()
                    .ForEach(item => _model.Items.Add(item));

                    listView.EndRefresh();
                }
                catch
                {
                }

                _model.Loading = false;

                UserDialogs.Instance.HideLoading();
            }
        }
Esempio n. 25
0
        public async Task <IHttpActionResult> SubscribeVideo(SubscribeVideoBindingModel model)
        {
            try
            {
                if (!ModelState.IsValid)
                {
                    return(BadRequest(ModelState));
                }

                using (SkriblContext ctx = new SkriblContext())
                {
                    var box = ctx.Boxes.FirstOrDefault(x => x.Id == model.Box_Id && x.IsDeleted == false);
                    if (box != null)
                    {
                        switch (model.Type)
                        {
                        case (int)BoxCategoryOptions.Junior:
                            model.ExpiryDate = model.Month.AddMonths(1);
                            break;

                        case (int)BoxCategoryOptions.Monthly:
                            model.ExpiryDate = model.Month.AddMonths(1);
                            break;

                        case (int)BoxCategoryOptions.ProBox:
                            model.ExpiryDate = model.Month.AddMonths(1);
                            break;

                        case (int)BoxCategoryOptions.HallOfFame:
                            model.ExpiryDate = model.Month.AddMonths(1);
                            break;
                        }

                        UserSubscriptions subscription = new UserSubscriptions {
                            CreatedDate = DateTime.Now, Type = box.BoxCategory_Id, Box_Id = model.Box_Id, User_Id = model.User_Id, SubscriptionDate = model.Month, ExpiryDate = model.ExpiryDate
                        };

                        subscription.GetRandomActivationCode();

                        ctx.UserSubscriptions.Add(subscription);
                        ctx.SaveChanges();
                        return(Ok(new CustomResponse <UserSubscriptions>
                        {
                            Message = Global.ResponseMessages.Success,
                            StatusCode = (int)HttpStatusCode.OK,
                            Result = subscription
                        }));
                    }
                    else
                    {
                        return(Ok(new CustomResponse <Error> {
                            Message = Global.ResponseMessages.BadRequest, StatusCode = (int)HttpStatusCode.BadRequest, Result = new Error {
                                ErrorMessage = "Invalid Box_Id"
                            }
                        }));
                    }
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(Utility.LogError(ex)));
            }
        }
        private async Task CheckUpdateUserSubscriptionDetails(ApplicationUser user)
        {
            List <UserSubscriptions> userSubs = _dbContext.UserSubscriptions
                                                .Where(x => x.UserId == user.Id && x.PayPalAgreementId != null)
                                                .ToList();

            if (userSubs.Count() > 0)
            {
                List <string> userSubscriptionIds = _dbContext.UserSubscriptions
                                                    .Where(x => x.UserId == user.Id && x.PayPalAgreementId != null)
                                                    .Select(x => x.PayPalAgreementId)
                                                    .ToList();

                foreach (var Id in userSubscriptionIds)
                {
                    //get user subscription
                    var client = _clientFactory.GetClient();
                    AgreementGetRequest        request = new AgreementGetRequest(Id);
                    BraintreeHttp.HttpResponse result  = await client.Execute(request);

                    Agreement agreement = result.Result <Agreement>();

                    //get user subscription
                    UserSubscriptions userExistingSubscription = user.Subscriptions.Where(x => x.PayPalAgreementId == Id).FirstOrDefault();

                    //first time user is cancelling.
                    if (agreement.State == "Cancelled" && userExistingSubscription.State != "Cancelled")
                    {
                        //if this is the first cancellation.
                        if (userExistingSubscription.ExpiryDate.Year < 1995)
                        {
                            //set expiry date in the User Subscription to the next billing date.
                            //"last_payment_date": "2020-06-15T17:57:02Z",
                            // "next_billing_date": "2020-07-15T10:00:00Z",

                            string expiryDateAsString = agreement.AgreementDetails.NextBillingDate.Substring(0, 10);

                            DateTime expiryDate = DateTime.ParseExact(expiryDateAsString, "yyyy-MM-dd", null);

                            userExistingSubscription.ExpiryDate = expiryDate;

                            //update user subscription status.
                            userExistingSubscription.State = agreement.State;

                            //only send cancellation email when Paypal first sends cancellation confirmation.

                            var cancellationEmailAlreadyBeenSent = _dbContext.UserSubscriptions.Where(x => x.UserId == user.Id && x.PayPalAgreementId == agreement.Id && x.State != "Cancelled").Any();
                            if (!cancellationEmailAlreadyBeenSent)
                            {
                                //Send user an email and let them know expiry date.
                                var confirmationHtml = $"<h2>As per your request, your Subscription <strong>{userExistingSubscription.Description}</strong> has been cancelled.</h2> <p>However, you can continue enjoy your access till your paid period expired on {userExistingSubscription.ExpiryDate}.</p>";
                                var sendGridKey      = _configuration.GetValue <string>("SendGridApi");
                                await Emailer.SendEmail(user.Email, "AndyTipster Subscription, has been cancelled", confirmationHtml, sendGridKey);


                                //Send admin an email and let them know expiry date.
                                var confirmationAdminHtml = $"<h2>User {user.Email} has cancelled their subscription for <strong>{userExistingSubscription.Description}</strong>.</h2> <p>However, user has access till their paid period expired on {userExistingSubscription.ExpiryDate}.</p><p>An email confirmation has been sent to user on {user.Email}</p>";
                                await Emailer.SendEmail("*****@*****.**", "A user has cancelled a Subscription", confirmationAdminHtml, sendGridKey);
                            }
                        }
                    }
                    if (agreement.State == "Cancelled" && userExistingSubscription.State == "Cancelled")
                    {
                        //check if subscription date has expired.
                        if (userExistingSubscription.ExpiryDate < DateTime.Now) // user subs expired, delete their subscription.
                        {
                            //delete Subscription.
                            var subsTobeDeleted = _dbContext.Subscriptions.Where(x => x.PayPalAgreementId == agreement.Id).FirstOrDefault();
                            if (subsTobeDeleted != null)
                            {
                                _dbContext.Subscriptions.Remove(subsTobeDeleted);
                            }

                            //delete user Subscription
                            var userSubsToBeDeleted = _dbContext.UserSubscriptions.Where(x => x.UserId == user.Id && x.State == "Cancelled" && x.PayPalAgreementId == agreement.Id).FirstOrDefault();
                            if (userSubsToBeDeleted != null)
                            {
                                _dbContext.UserSubscriptions.Remove(userSubsToBeDeleted);
                            }

                            _dbContext.SaveChanges();

                            //Send user an email and let them know subscription now has expired.
                            var expiredHtml = $"<h2>Your Subscription <strong>{userExistingSubscription.Description}</strong> has now expired.</h2>";
                            var sendGridKey = _configuration.GetValue <string>("SendGridApi");
                            await Emailer.SendEmail(user.Email, "Andy Tipster Subscription has expired.", expiredHtml, sendGridKey);

                            //Send admin an email and let them know expiry.
                            var expiredAdminHtml = $"<h2>User {user.Email} subscription for <strong>{userExistingSubscription.Description}</strong>. has now expired.</h2><p>An email confirmation has been sent to user on {user.Email}</p>";
                            await Emailer.SendEmail("*****@*****.**", $"{userExistingSubscription.PayerEmail} : Subscription has expired.", expiredAdminHtml, sendGridKey);
                        }
                    }

                    await userManager.UpdateAsync(user);
                }
            }
        }
Esempio n. 27
0
        public async Task RegisterUserNotifications()
        {
            string deviceToken = GetDeviceToken();

            var notificationsSubscriptions = GetNotificationsSubscriptions();

            if (string.IsNullOrEmpty(deviceToken))
            {
                return;
            }

            var credentials = new BasicAWSCredentials(
                AppSettings.Instance.AwsKey,
                AppSettings.Instance.AwsSecret
                );

            var client = new AmazonSimpleNotificationServiceClient(
                credentials,
                Amazon.RegionEndpoint.EUWest1
                );

            if (string.IsNullOrEmpty(notificationsSubscriptions.ApplicationEndPoint) ||
                notificationsSubscriptions.DeviceToken != deviceToken)
            {
                // **********************************************
                // de-register old endpoint and all subscriptions
                if (!string.IsNullOrEmpty(notificationsSubscriptions.ApplicationEndPoint))
                {
                    try
                    {
                        var response = await client.DeleteEndpointAsync(new DeleteEndpointRequest { EndpointArn = notificationsSubscriptions.ApplicationEndPoint });

                        if (response.HttpStatusCode != System.Net.HttpStatusCode.OK)
                        {
                            ShowAlert("Debug", $"Error eliminando endpoint: {response.HttpStatusCode}");
                        }
                    }
                    catch { /*Silent error in case endpoint doesn´t exist */ }

                    notificationsSubscriptions.ApplicationEndPoint = null;

                    foreach (var sub in notificationsSubscriptions.Subscriptions)
                    {
                        try
                        {
                            await client.UnsubscribeAsync(sub.Value);
                        }
                        catch { /*Silent error in case endpoint doesn´t exist */ }
                    }

                    notificationsSubscriptions.Subscriptions.Clear();
                }

                // register with SNS to create a new endpoint
                var endPointResponse = await client.CreatePlatformEndpointAsync(
                    new CreatePlatformEndpointRequest
                {
                    Token = deviceToken,
                    PlatformApplicationArn = Device.RuntimePlatform == Device.iOS ?
                                             AppSettings.Instance.AwsPlatformApplicationArnIOS :
                                             AppSettings.Instance.AwsPlatformApplicationArnAndroid
                }
                    );

                if (endPointResponse.HttpStatusCode != System.Net.HttpStatusCode.OK)
                {
                    ShowAlert("Debug", $"Error registrando endpoint: {endPointResponse.HttpStatusCode}, {endPointResponse.ResponseMetadata}");
                }

                // Save device token and application endpoint created
                notificationsSubscriptions.DeviceToken         = deviceToken;
                notificationsSubscriptions.ApplicationEndPoint = endPointResponse.EndpointArn;
            }

            // Retrieve subscriptions
            var subscriptions = await AudioLibrary.Instance.GetUserSubscriptions(false);

            if (subscriptions == null)
            {
                subscriptions = new UserSubscriptions {
                    Subscriptions = new List <Models.Api.Subscription>()
                }
            }
            ;

            // Register non existings subscriptions
            var subscriptionsCodes = subscriptions.Subscriptions.Select(s => s.Code).ToList();

            foreach (var code in subscriptionsCodes)
            {
                if (!notificationsSubscriptions.Subscriptions.ContainsKey(code))
                {
                    var topicArn = AppSettings.Instance.AwsTopicArn;
                    topicArn += string.IsNullOrEmpty(code) ? "" : $"-{code}";

                    if (!await TopicExists(topicArn, client))
                    {
                        var topicResponse = await client.CreateTopicAsync(new CreateTopicRequest { Name = $"{AppSettings.Instance.AwsTopicName}-{code}" });

                        if (topicResponse.HttpStatusCode != System.Net.HttpStatusCode.OK)
                        {
                            ShowAlert("Debug", $"Error creando topic: {topicResponse.HttpStatusCode}, {topicResponse.ResponseMetadata}");
                        }

                        topicArn = topicResponse.TopicArn;
                    }


                    // Subscribe
                    var subscribeResponse = await client.SubscribeAsync(new SubscribeRequest
                    {
                        Protocol = "application",
                        Endpoint = notificationsSubscriptions.ApplicationEndPoint,
                        TopicArn = topicArn
                    });

                    if (subscribeResponse.HttpStatusCode != System.Net.HttpStatusCode.OK)
                    {
                        ShowAlert("Debug", $"Error creando suscripción: {subscribeResponse.HttpStatusCode}, {subscribeResponse.ResponseMetadata}");
                    }

                    // Add to the list
                    notificationsSubscriptions.Subscriptions.Add(code, subscribeResponse.SubscriptionArn);
                }
            }

            // Remove subscriptions not in user list
            var currentSubscriptions = notificationsSubscriptions.Subscriptions.ToList();

            foreach (var subs in currentSubscriptions)
            {
                if (!subscriptionsCodes.Contains(subs.Key))
                {
                    try
                    {
                        await client.UnsubscribeAsync(subs.Value);
                    }
                    catch { /*Silent error in case endpoint doesn´t exist */ }

                    notificationsSubscriptions.Subscriptions.Remove(subs.Key);
                }
            }

            // Save notifications subscriptions
            await SaveNotificationsSubscriptions(notificationsSubscriptions);
        }
Esempio n. 28
0
        public async Task <IActionResult> Purchase(PurchaseVm model)
        {
            var plan    = _dbContext.BillingPlans.FirstOrDefault(x => x.PayPalPlanId == model.Product.PayPalPlanId);
            var product = _dbContext.Products.FirstOrDefault(x => x.PayPalPlanId == model.Product.PayPalPlanId);

            //check DUPLICATES
            ApplicationUser currentUser = await _userManager.GetUserAsync(User);

            var userhasAnySubscriptions = _dbContext.UserSubscriptions.Any(x => x.UserId == currentUser.Id && x.SubscriptionId != null);

            if (userhasAnySubscriptions)
            {
                List <UserSubscriptions> subscribedPlans = _dbContext.UserSubscriptions.Where(x => x.UserId == currentUser.Id && x.SubscriptionId != null).ToList();

                bool alreadySusbcribedToThisPlan = subscribedPlans.Any(x => x.PayPalPlanId == product.PayPalPlanId);

                if (alreadySusbcribedToThisPlan)
                {
                    return(RedirectToAction("DuplicateSubscriptionFound", product));
                }
            }


            if (ModelState.IsValid && plan != null)
            {
                // Since we take an Initial Payment (instant payment), the start date of the recurring payments will be next month.
                //var startDate = DateTime.UtcNow.AddMonths(1);

                //set subscription start date based on plan.
                var startDate = DateTime.UtcNow;
                if (plan.Name.Contains("Monthly"))
                {
                    startDate = DateTime.UtcNow.AddMonths(1);
                }

                if (plan.Name.Contains("3 Months"))
                {
                    startDate = DateTime.UtcNow.AddMonths(3);
                }


                //start_date string required
                //The date and time when this agreement begins, in Internet date and time format.
                //The start date must be no less than 24 hours after the current date as the agreement can take up to 24 hours to activate.
                //The start date and time in the create agreement request might not match the start date and time that the API returns
                //in the execute agreement response. When you execute an agreement, the API internally converts the start date and time to
                //the start of the day in the time zone of the merchant account.For example, the API converts a 2017 - 01 - 02T14: 36:21Z start date and time
                //for an account in the Berlin time zone(UTC + 1) to 2017 - 01 - 02T00:00:00.When the API returns this date and time in the
                //execute agreement response, it shows the converted date and time in the UTC time zone.So,
                //the internal 2017-01-02T00:00:00 start date and time becomes 2017-01-01T23:00:00 externally.
                string formatedStringDate = startDate.ToString("o", CultureInfo.InvariantCulture);
                var    formatedStartDate  = DateTime.Parse(formatedStringDate, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind);

                //DateTime.UtcNow.ToString("o");


                var subscription = new Subscription()
                {
                    FirstName    = currentUser.FirstName,
                    LastName     = currentUser.LastName,
                    Email        = currentUser.Email,
                    StartDate    = formatedStartDate, //stat date has to be greator than now.
                    PayPalPlanId = plan.PayPalPlanId
                };
                _dbContext.Subscriptions.Add(subscription);


                var userNewSubscriptoin = new UserSubscriptions()
                {
                    PayPalPlanId = plan.PayPalPlanId,
                    Description  = plan.Description,
                    User         = currentUser,
                    UserId       = currentUser.Id
                };

                _dbContext.UserSubscriptions.Add(userNewSubscriptoin);

                _dbContext.SaveChanges();

                var agreement = new Agreement()
                {
                    Name        = plan.Name,
                    Description = plan.Description,
                    StartDate   = startDate.ToString("yyyy-MM-ddTHH:mm:ssZ"),
                    Plan        = new PlanWithId()
                    {
                        Id = Convert.ToString(plan.PayPalPlanId)
                    },
                    Payer = new Payer()
                    {
                        PaymentMethod = "paypal"
                    }
                };


                // Send the agreement to PayPal
                var client  = _clientFactory.GetClient();
                var request = new AgreementCreateRequest()
                              .RequestBody(agreement);
                var result = await client.Execute(request);

                Agreement createdAgreement = result.Result <Agreement>();

                // Find the Approval URL to send our user to (also contains the token)
                var approvalUrl =
                    createdAgreement.Links.FirstOrDefault(
                        x => x.Rel.Equals("approval_url", StringComparison.OrdinalIgnoreCase));

                var token = QueryHelpers.ParseQuery(approvalUrl?.Href)["token"].First();

                // Save the token so we can match the returned request to our subscription.
                subscription.PayPalAgreementToken = token;


                _dbContext.SaveChanges();

                // Send the user to PayPal to approve the payment
                return(Redirect(approvalUrl.Href));
            }

            model.Product = product;
            return(View(model));
        }
Esempio n. 29
0
 public async Task <Result.Result <Boolean> > AddUserSubscriptionAsync(Models.UserSubscription entity)
 {
     return(await UserSubscriptions.AddOneAsync(entity).ConfigureAwait(false));
 }
Esempio n. 30
0
 public async Task <Result.Result <Boolean> > DeleteUserSubscriptionAsync(string key)
 {
     return(await UserSubscriptions.RemoveOneAsync(key).ConfigureAwait(false));
 }