public InvitationCode Generate(string emailAdress, BasicUser invitedBy, string registrationCode) { if (_invitationValidatorService.MailExists(emailAdress)) { throw new MailAlreadyExistsException(); } //Create a new RegistrationCode InvitationCode ic = new InvitationCode { EmailAddress = emailAdress.Trim().ToLower(), Code = registrationCode.Trim(), InvitedBy = invitedBy }; _invitationCodeRepository.SaveOrUpdate(ic); return(ic); }
public void InviteUsers(BasicUser invitedBy, string comments, FriendProvider friendProvider, IList <IBasicUser> contacts, bool includeInvitationCode) { // Make sure we get the complete user. BasicUser user = basicUserRepository.Get(invitedBy.Id); // If we are including the invitation code is because we are in Beta, no more than 10 invites per user. #if !DEBUG if (includeInvitationCode) { if (user.Friends.Count + contacts.Count >= MAX_TO_INVITE) { if (MAX_TO_INVITE - user.Friends.Count > 0) { throw new LimitOfFriendsExceededException(string.Format("You can add up to {0} more friends in the Beta period.", MAX_TO_INVITE - user.Friends.Count)); } else { throw new LimitOfFriendsExceededException(string.Format("You have reached the {0} contacts limit in the Beta period.", MAX_TO_INVITE)); } } } #endif basicUserRepository.DbContext.BeginTransaction(); foreach (IBasicUser contact in contacts) { if (contact.EmailAddress.Trim() == string.Empty || user.EmailAddress.Trim().ToLower() == contact.EmailAddress.Trim().ToLower()) { continue; } // Call the Friend Creator service Friend f = friendCreatorService.Create(contact.EmailAddress.Trim().ToLower(), contact.FirstName, contact.LastName, friendProvider); // Make sure it does not have it as a friend to send the email. if (!user.HasFriend(f)) { // Save the Friend into the user collection f.BasicUser = user; user.AddFriend(f); } // TODO: Review how to get the Url from the controller string confirmUrl = string.Format("/Friend/InvitedMe/default.aspx"); InviteData inviteData = new InviteData { Friend = f, AcceptUrl = confirmUrl, InvitationCode = Guid.NewGuid().ToString() }; if (f.User is InvitedUser) { if (includeInvitationCode) { // Create an invitation code InvitationCode ic = new InvitationCode(); ic.EmailAddress = f.User.EmailAddress; ic.Code = inviteData.InvitationCode; ic.InvitedBy = f.BasicUser; invitationCodeRepository.SaveOrUpdate(ic); messageSenderService.SendWithTemplate("invitation_with_code", user, inviteData, f.User.EmailAddress); } else { messageSenderService.SendWithTemplate("invitation", user, f, f.User.EmailAddress); } } else { messageSenderService.SendWithTemplate("acceptinvite", user, inviteData, f.User.EmailAddress); } } basicUserRepository.SaveOrUpdate(user); basicUserRepository.DbContext.CommitTransaction(); }
public bool RegisterMember(string email, string userName, string firstName, string lastName, string password, UserSize userSize, int membershipUserId, string zipCode, IList <UserFlavor> userFlavors, IList <EventType> eventTypes, IList <Garment> mygarments, IList <Garment> mywishlist, string validateUri, string channel, string invitationCode) { bool mustConfirmMail = true; try { IDictionary <string, object> propertyValues; bool invited = false; email = email.ToLower().Trim(); userName = userName.ToLower().Trim(); basicUserRepository.DbContext.BeginTransaction(); if (!string.IsNullOrEmpty(invitationCode)) { propertyValues = new Dictionary <string, object>(); propertyValues.Add("Code", invitationCode); InvitationCode ic = invitationCodeRepository.FindOne(propertyValues); if (!invitationValidatorService.IsValidCode(ic)) { throw new InvalidInvitationCodeException(); } mustConfirmMail = string.IsNullOrEmpty(ic.EmailAddress); ic.MarkUsed(); invitationCodeRepository.SaveOrUpdate(ic); } RegisteredUser user = new RegisteredUser(); user.UserName = userName; user.FirstName = firstName; user.LastName = lastName; user.EmailAddress = email.ToLower().Trim(); user.Size = userSize; user.PhoneNumber = string.Empty; user.MembershipUserId = membershipUserId; user.RegistrationCode = Guid.NewGuid().ToString(); // Used for email verification purposes. user.ChangeZipCode(zipCode); user.SetFlavors(userFlavors); user.Channel = channel; if (eventTypes != null) { foreach (EventType eventType in eventTypes) { user.AddEventType(eventType); } } // Create Closet Closet closet = new Closet(); closet.User = user; closet.PrivacyLevel = PrivacyLevel.Private; closet.MarkAsProcessed(); if (mygarments != null) { foreach (Garment garment in mygarments) { closet.AddGarment(garment); } } user.Closet = closet; // Check if the user does not exist with that mail propertyValues = new Dictionary <string, object>(); propertyValues.Add("EmailAddress", email); BasicUser bu = basicUserRepository.FindOne(propertyValues); // HACK: We need to change the mail of the invited user to be able to add the new registered user. if (bu != null && bu is InvitedUser) { InvitedUser iu = bu as InvitedUser; iu.EmailAddressReplaced = iu.EmailAddress; iu.EmailAddress += new Random().Next().ToString(); basicUserRepository.SaveOrUpdate(iu); basicUserRepository.DbContext.CommitTransaction(); basicUserRepository.DbContext.BeginTransaction(); closetRepository.SaveOrUpdate(closet); basicUserRepository.SaveOrUpdate(user); propertyValues = new Dictionary <string, object>(); propertyValues.Add("User", bu); IList <Friend> lst = friendRepository.FindAll(propertyValues); if (lst.Count > 0) { foreach (Friend f in lst) { Friend newFriend = new Friend(); newFriend.BasicUser = user; newFriend.User = f.BasicUser; newFriend.Status = FriendStatus.Pending; friendRepository.SaveOrUpdate(newFriend); } } invited = true; } else { closetRepository.SaveOrUpdate(closet); basicUserRepository.SaveOrUpdate(user); } // Create wishlist even if no items been selected for further use. WishList wl = new WishList(); wl.User = user; // Save Wish List if (mywishlist != null && mywishlist.Count > 0) { foreach (Garment wishlist in mywishlist) { wl.AddGarment(wishlist); } } wishListRepository.SaveOrUpdate(wl); // Send Email Confirmation Mail if (mustConfirmMail) { SendValidationCode(user, validateUri); } // Commit Transaction basicUserRepository.DbContext.CommitTransaction(); new FashionAde.Utils.OutfitEngineService.OutfitEngineServiceClient().CreateOutfits(closet.Id); if (invited) { basicUserRepository.MigrateInvited(bu as InvitedUser, user); } } catch { try { basicUserRepository.DbContext.RollbackTransaction(); } catch { } throw; } return(mustConfirmMail); }