public string RecordNewUserInvitation(int type, long team_id, string email, int access_level, int userId, bool enableUndercarriage, bool enableGET) { string result = ""; using (var context = new SharedContext()) { var currentuser = context.USER_TABLE.Find(userId); string aspUserId = currentuser != null ? currentuser.AspNetUserId : ""; var aspUser = context.AspNetUsers.Find(aspUserId); UserInvitations invite = new UserInvitations(); invite.team_type = type; invite.team_id = team_id; invite.email = email; invite.access_level = access_level; invite.invitation_sent = DateTime.Now; invite.disable = false; invite.SenderEmail = (aspUser == null && currentuser == null) ? "" : (aspUser == null ? currentuser.email : aspUser.Email); invite.SenderAspUserId = aspUser == null ? "" : aspUserId; invite.InvitationAccepted = false; invite.EnableUndercarriage = enableUndercarriage; invite.EnableGET = enableGET; context.UserInvitations.Add(invite); context.SaveChanges(); result = invite.unique_id.ToString(); } return(result); }
public async Task <Tuple <bool, string> > InviteNewUser(UserModel user, long invitedByUserId) { var existingAccountEmail = await _context.USER_TABLE.Where(t => t.email == user.Email).FirstOrDefaultAsync(); var existingInvitationEmail = await _context.UserInvitations.Where(t => t.email == user.Email).FirstOrDefaultAsync(); if (existingAccountEmail != null || existingInvitationEmail != null) { return(Tuple.Create(false, "A user with this email already exists. ")); } var existingUserName = await _context.USER_TABLE.Where(t => t.userid == user.UserName).Where(t => t.user_auto != user.Id).FirstOrDefaultAsync(); if (existingUserName != null) { return(Tuple.Create(false, "A user with this username already exists. ")); } var aspNetUserId = await _context.USER_TABLE.Where(t => t.user_auto == user.Id).Select(t => t.AspNetUserId).FirstOrDefaultAsync(); var existingUserName2 = await _context.AspNetUsers.Where(t => t.UserName == user.UserName).Where(t => t.Id != aspNetUserId).FirstOrDefaultAsync(); if (existingUserName2 != null) { return(Tuple.Create(false, "A user with this username already exists. ")); } if (user.Password.Length < 3) { return(Tuple.Create(false, "Password must be at least 3 characters. ")); } int teamType = 0; int teamId = 0; if (user.DealershipId != null) { teamType = 1; teamId = (int)user.DealershipId; } else if (user.CustomerId != null) { teamType = 2; teamId = (int)user.CustomerId; } var userInvitation = new UserInvitations() { team_type = teamType, team_id = teamId, email = user.Email, name = user.Name, username = user.UserName, access_level = user.AccessTypeId, invitation_sent = DateTime.Now, disable = false, SenderEmail = _context.USER_TABLE.Find(invitedByUserId).email, SenderAspUserId = _context.USER_TABLE.Find(invitedByUserId).AspNetUserId, InvitationAccepted = false, EnableUndercarriage = user.UndercarriageEnabled, EnableGET = user.GetEnabled }; _context.UserInvitations.Add(userInvitation); // Add customer access records if required if (user.AccessTypeId == (int)UserAccessTypes.DealershipUser) { foreach (var customer in user.AccessCustomerIds) { _context.UserInvitationAccessToCustomers.Add(new UserInvitationAccessToCustomers() { customerId = customer, invitationId = userInvitation.invitation_auto }); } } // Add job role records foreach (var role in user.JobRoles) { _context.UserInvitationJobRoles.Add(new UserInvitationJobRoles() { invitationId = userInvitation.invitation_auto, jobRoleId = role }); } _context.SaveChanges(); // Send email if (userInvitation.unique_id.ToString() == "") { return(Tuple.Create(false, "Failed to generate unique registration ID. Please contact support. ")); } var emailManager = new EmailManager(); BLL.Core.Domain.AppConfigAccess ACA = new BLL.Core.Domain.AppConfigAccess(); string identityServerAccess = ACA.GetApplicationValue("IdentityServerUri"); string emailSubject = "Invited to register for TrackTreads"; string emailBody = @"<br/> <p>You have been invited to register for TrackTreads.</p> <br/> <p>Please use the following link to complete your registration.</p> <p><a href='" + identityServerAccess + @"Account/Register?token=" + userInvitation.unique_id + "'>" + identityServerAccess + @"Account/Register?token=" + userInvitation.unique_id + @" </a></p> <br/><br/>"; var result = emailManager.SendEmail(user.Email, emailSubject, emailBody, true); if (result) { return(Tuple.Create(true, userInvitation.unique_id.ToString())); } return(Tuple.Create(false, "Failed to send the email to the user. ")); }