public async Task ResentInviatationAsync(string organisationId, string userId, string email, string webUrl) { using var context = Context(); if (!context.OrganisationUserMenuFeature.Any(u => u.OrganisationId == organisationId && u.UserId == userId && u.MenuFeatureId == (int)MenuFeatureEnum.ManageOrganisactionSetting)) { throw new Exception("You don't have permission to invite user"); } var inviteUser = context.OrganisationInvitingUser.FirstOrDefault(u => u.OrganisationId == organisationId && u.Email == email.ToLower()); if (inviteUser == null) { throw new Exception("Invite user does't exist"); } inviteUser.ExpireToken = CurrentCambodiaTime.AddDays(2); inviteUser.Token = Guid.NewGuid().ToString(); context.SaveChanges(); webUrl += "/Identity/Account/Invite?token=" + inviteUser.Token; await emailService.SendEmailAsync(inviteUser.Email, "Invitation to Invoice Account", $"You've been invited to join: {inviteUser.Organisation.DisplayName} <a href='{webUrl}'>clicking here</a>.", true); }
public async Task InviteUserAsync(OrganisationUser organisationUser, string organisationId, string userId, string webUrl) { using var context = Context(); if (string.IsNullOrEmpty(organisationUser.User.Email)) { throw new Exception("Email is require"); } if (string.IsNullOrEmpty(organisationUser.User.FirstName)) { throw new Exception("First name is require"); } if (string.IsNullOrEmpty(organisationUser.User.LastName)) { throw new Exception("Last name is require"); } if (string.IsNullOrEmpty(organisationUser.User.Name)) { throw new Exception("Display name is require"); } if (!context.OrganisationUserMenuFeature.Any(u => u.OrganisationId == organisationId && u.UserId == userId && u.MenuFeatureId == (int)MenuFeatureEnum.ManageOrganisactionSetting)) { throw new Exception("You don't have permission to invite user"); } if (context.OrganisationUser.Any(u => u.OrganisationId == organisationId && u.User.Email.ToLower() == organisationUser.User.Email.ToLower())) { throw new Exception("User already invited"); } if (context.OrganisationInvitingUser.Any(u => u.OrganisationId == organisationId && u.Email == organisationUser.User.Email.ToLower())) { throw new Exception("User already invited"); } var newInviteUser = new Dal.Models.OrganisationInvitingUser { DisplayName = organisationUser.User.Name, Email = organisationUser.User.Email.ToLower(), FirstName = organisationUser.User.FirstName, LastName = organisationUser.User.LastName, OrganisationId = organisationId, RoleName = organisationUser.RoleName, ExpireToken = CurrentCambodiaTime.AddDays(2), Token = Guid.NewGuid().ToString(), }; if (!organisationUser.IsAdministrator) { foreach (var m in organisationUser.MenuFeatures) { if (m.IsCheck) { context.OrganisationInvitingUserMenuFeature.Add(new Dal.Models.OrganisationInvitingUserMenuFeature { Email = organisationUser.User.Email.ToLower(), MenuFeatureId = m.Id, OrganisationId = organisationId }); } } } else { foreach (var m in organisationUser.MenuFeatures) { context.OrganisationInvitingUserMenuFeature.Add(new Dal.Models.OrganisationInvitingUserMenuFeature { Email = organisationUser.User.Email.ToLower(), MenuFeatureId = m.Id, OrganisationId = organisationId }); } } var organisation = context.Organisation.FirstOrDefault(u => u.Id == organisationId); context.OrganisationInvitingUser.Add(newInviteUser); context.SaveChanges(); webUrl += "/Identity/Account/Invite?token=" + newInviteUser.Token; await emailService.SendEmailAsync(organisationUser.User.Email, "Invitation to Invoice Account", $"You've been invited to join: {organisation.DisplayName} <a href='{webUrl}'>clicking here</a>.", true); }