// ----------------------------------------------- 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); }
/// <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); } }