// ----------------------------------------------- OLD METHODS -----------------------------------------------


        public EntityFramework.UsersDimensions NewUserDimension(int IdDimension, int IdSubscription)
        {
            if (IdDimension == 0 || IdSubscription == 0)
            {
                return(null);
            }

            var userdimension = new EntityFramework.UsersDimensions();

            userdimension.IdDimension    = IdDimension;
            userdimension.DateCreated    = DateTime.Now;
            userdimension.DateLastUpdate = DateTime.Now;
            userdimension.IdSubscription = IdSubscription;
            userdimension.Active         = true;

            //ahora setea el valor por defecto si es que tiene relacion entre dimension y perfil del usuario
            //var dimension = db.Dimensions.FirstOrDefault(e => e.IdDimension == IdDimension);
            var profiledimension = db.ProfilesDimensions.Where(e => e.Profiles.Subscriptions.Any(j => j.IdSubscription == IdSubscription) && e.IdDimension == IdDimension).FirstOrDefault();

            //le inserto su valor por defecto
            userdimension.CurrentValue = profiledimension.Value;

            db.UsersDimensions.Add(userdimension);
            db.SaveChanges();

            return(userdimension);
        }
Esempio n. 2
0
        /// <summary>
        /// Will set or update all related to change one profile. Need to be gobernated by transaction
        /// in order to keep consistency. Whatever profile is free or premium, requires create subscription
        /// Subscription links profile with user
        /// </summary>
        /// <param name="idProfile">ID new profile to be setted</param>
        /// <param name="idUser">ID user (freemium)</param>
        /// <param name="idClient">ID user MASTER</param>
        /// <param name="idProduct">ID product</param>
        /// <returns></returns>
        public bool SetProfileUser(int idProfile, int idUser, int idClient, int idProduct)
        {
            try
            {
                // User exists
                if (idUser != 0)
                {
                    // Find for subscription
                    var subscription = GetUserCurrentSubscription(idUser);

                    // Will check if profile is the same or not
                    if (subscription.IdProfile == idProfile)
                    {
                        this.lastError = "El perfil enviado es el mismo al actual del usuario";
                        return(false);
                    }

                    // STEP A1: If it exists, will check for UserDimensions (trying to delete them)

                    var userDimensions = db.UsersDimensions.Where(e => e.IdSubscription == subscription.IdSubscription);
                    foreach (EntityFramework.UsersDimensions oUserDimension in userDimensions)
                    {
                        db.UsersDimensions.Remove(oUserDimension);
                    }

                    // STEP A2: Update user to new profile
                    subscription.IdProfile = idProfile;

                    // STEP A3: Recreate UserDimensions if new profile has consumible dimensions
                    // Get dimensions by profile
                    List <EntityFramework.Dimensions> dimensions = db.Dimensions.Where(e => e.ProfilesDimensions.Any(j => j.IdProfile == idProfile)).ToList();

                    if (dimensions.Count > 0)
                    {
                        foreach (var oDimension in dimensions)
                        {
                            // STEP A4: Check if dimension type is consumible
                            if (oDimension.IdDimensionType == (int)DimensionTypeEnum.CONSUMIBLE)
                            {
                                int idDimension = oDimension.IdDimension;

                                // Create new UserDimension
                                var userdimension = new EntityFramework.UsersDimensions();

                                userdimension.IdDimension    = idDimension;
                                userdimension.DateCreated    = DateTime.Now;
                                userdimension.DateLastUpdate = DateTime.Now;
                                userdimension.IdSubscription = subscription.IdSubscription;
                                userdimension.Active         = true;

                                // Find value between profile and dimension
                                var profileDimension = db.ProfilesDimensions.Where(e => e.IdProfile == idProfile && e.IdDimension == idDimension).FirstOrDefault();

                                // Set default value
                                userdimension.CurrentValue = profileDimension.Value;

                                db.UsersDimensions.Add(userdimension);
                            }
                        }
                    }

                    // Commit
                    db.SaveChanges();
                }
                else
                {
                    // If it doesn't exist, will set profile to user
                    using (EntityFramework.FriPriEntities context = new EntityFramework.FriPriEntities())
                    {
                        if (context.Database.Connection.State != ConnectionState.Open)
                        {
                            context.Database.Connection.Open();
                        }

                        using (var transaction = context.Database.BeginTransaction())
                        {
                            try
                            {
                                // Create user
                                EntityFramework.Users newClient = new Repository.EntityFramework.Users
                                {
                                    Active       = true,
                                    ExternalCode = idClient.ToString(), // ID user master
                                    IdProduct    = idProduct
                                };

                                context.Users.Add(newClient);
                                context.SaveChanges();


                                // Create subscription
                                EntityFramework.Subscriptions newSubscription = new Repository.EntityFramework.Subscriptions
                                {
                                    Active       = true,
                                    DateCreated  = DateTime.Now,
                                    ExternalCode = "",
                                    IdProfile    = idProfile,
                                    IdUser       = newClient.IdUser,
                                    IsCurrent    = true,
                                    RenewalDay   = DateTime.Now.Day,
                                    LastRenewal  = DateTime.Now
                                };

                                context.Subscriptions.Add(newSubscription);
                                context.SaveChanges();

                                // Get dimensions by profile
                                List <EntityFramework.Dimensions> dimensions = context.Dimensions.Where(e => e.ProfilesDimensions.Any(j => j.IdProfile == idProfile)).ToList();

                                if (dimensions.Count > 0)
                                {
                                    foreach (var oDimension in dimensions)
                                    {
                                        // STEP A4: Check if dimension type is consumible
                                        if (oDimension.IdDimensionType == (int)DimensionTypeEnum.CONSUMIBLE)
                                        {
                                            int idDimension = oDimension.IdDimension;

                                            // Create new UserDimension
                                            var userdimension = new EntityFramework.UsersDimensions();

                                            userdimension.IdDimension    = idDimension;
                                            userdimension.DateCreated    = DateTime.Now;
                                            userdimension.DateLastUpdate = DateTime.Now;
                                            userdimension.IdSubscription = newSubscription.IdSubscription;
                                            userdimension.Active         = true;

                                            // Find value between profile and dimension
                                            var profileDimension = context.ProfilesDimensions.Where(e => e.IdProfile == idProfile && e.IdDimension == idDimension).FirstOrDefault();

                                            // Set default value
                                            userdimension.CurrentValue = profileDimension.Value;

                                            context.UsersDimensions.Add(userdimension);
                                        }
                                    }

                                    context.SaveChanges();
                                    transaction.Commit();
                                }
                            } catch (Exception e)
                            {
                                transaction.Rollback();
                                this.lastError = e.Message;

                                return(false);
                            }
                            finally
                            {
                                if (context.Database.Connection.State == ConnectionState.Open)
                                {
                                    context.Database.Connection.Close();
                                }
                            }
                        }
                    } // using
                }     // end general if-else

                return(true);
            }
            catch (Exception)
            {
                return(false);
            }
        }