public IActionResult RequestInvite(InviteRequestModel requestModel)
        {
            //if already logged in, redirect to home
            if (!CurrentUser.IsVisitor())
            {
                return(R.Fail.Result);
            }
            //check if the email being requested is already a regsitered user
            var user = _userService.GetByUserInfo(requestModel.Email);

            if (user != null)
            {
                return(R.Fail.With("error", T("A user with this email is already registered")).Result);
            }
            //do we already have a request with this email
            var inviteRequest = _inviteRequestService.FirstOrDefault(x => x.Email == requestModel.Email);

            if (inviteRequest == null)
            {
                inviteRequest = new InviteRequest()
                {
                    Email     = requestModel.Email,
                    CreatedOn = DateTime.UtcNow
                };
                _inviteRequestService.Insert(inviteRequest);
                RaiseEvent(NamedEvent.InvitationRequested, requestModel.Email);
            }
            return(R.Success.Result);
        }
        public async Task <IHttpActionResult> InviteToRegisterInCompany(Invite inviteDetail)
        {
            CervittApiResult result = new CervittApiResult();

            if (inviteDetail == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            if (string.IsNullOrEmpty(inviteDetail.EmailAddress))
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }


            User user = await db.Users.SingleOrDefaultAsync(c => c.UserName == User.Identity.Name);

            if (user == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            if (!User.Identity.IsAuthenticated)
            {
                throw new HttpResponseException(HttpStatusCode.Unauthorized);
            }

            if (user.Company == null)
            {
                throw new HttpResponseException(HttpStatusCode.BadRequest);
            }

            string postEmailAddress = inviteDetail.EmailAddress.Replace(Environment.NewLine, ",");

            postEmailAddress = postEmailAddress.Replace('\r', ',');
            postEmailAddress = postEmailAddress.Replace('\n', ',');
            string[] emailListToInvite = postEmailAddress.Split(',');

            bool hasInvalidEmailAddressInList = false;

            if (emailListToInvite.Length == 0)
            {
                result.Success      = false;
                result.ErrorMessage = "No any email address to invite.";
            }
            else
            {
                hasInvalidEmailAddressInList = EmailService.CheckAnyEmailIsNotValid(emailListToInvite);

                if (hasInvalidEmailAddressInList)
                {
                    result.Success      = false;
                    result.ErrorMessage = "Invalid email address found or email format is not correct.";
                    return(Ok(result));
                }

                for (int i = 0; i <= emailListToInvite.Length - 1; i++)
                {
                    if (string.IsNullOrEmpty(emailListToInvite[i]))
                    {
                        continue;
                    }

                    string emailToInvite = emailListToInvite[i].Trim();

                    Guid inviteCode = Guid.NewGuid();

                    bool userExistInSystem = await db.Users.AnyAsync(u => u.Email == emailToInvite);

                    if (!userExistInSystem)
                    {
                        InviteRequest existingRequest = await db.InviteRequests.SingleOrDefaultAsync(c => c.InviteType == 1 && c.InviteToEmailAddress == emailToInvite && c.InviteFromUserId == user.Id && c.Processed == false);

                        if (existingRequest == null)
                        {
                            string webSiteUrl   = System.Configuration.ConfigurationManager.AppSettings["WebSiteUrl"];
                            string emailContent = " You have been invited by {0} to join." + "<br><br>" + "Please click below link to register and join.";
                            emailContent = string.Format(emailContent, user.FirstName + " (" + user.Email + ")");
                            emailContent = emailContent + "<br><br>" + string.Format("Click here to <a href='{0}/{1}'><strong>Join</strong></a>", string.Concat(webSiteUrl, "/", "registration"), inviteCode.ToString());
                            string          apiKey         = SENDGRID_API_KEY;
                            SendGridClient  sendGridClient = new SendGridClient(apiKey, "https://api.sendgrid.com");
                            EmailAddress    emailSender    = new EmailAddress("*****@*****.**", "Cervitt");
                            String          subject        = "Invitation from Cervitt User to join.";
                            EmailAddress    emailRecipient = new EmailAddress(emailToInvite);
                            Content         content        = new Content("text/html", emailContent);
                            SendGridMessage mail           = MailHelper.CreateSingleEmail(emailSender, emailRecipient, subject, "", emailContent);
                            dynamic         response       = sendGridClient.SendEmailAsync(mail);
                            InviteRequest   inviteRequest  = new InviteRequest();
                            inviteRequest.InviteType           = 1;
                            inviteRequest.Processed            = false;
                            inviteRequest.InviteDate           = DateTime.Now;
                            inviteRequest.InviteCode           = inviteCode;
                            inviteRequest.InviteFromCompanyId  = user.Company.ID;
                            inviteRequest.InviteFromUserId     = user.Id;
                            inviteRequest.InviteToEmailAddress = emailToInvite;
                            inviteRequestService.Insert(inviteRequest);
                            result.Success         = true;
                            result.SuccessMessage += emailToInvite + ",";
                        }
                    }
                }
            }

            if (result.Success)
            {
                if (result.SuccessMessage.EndsWith(","))
                {
                    result.SuccessMessage = result.SuccessMessage.TrimEnd(',');
                }

                result.SuccessMessage = "Invite request has been sent to " + result.SuccessMessage;
            }
            else
            {
                result.ErrorMessage = "Invite request not sent. (Possible reason: Either email is invalid, email already exist or request already sent.)";
            }

            return(Ok(result));
        }