private PortalActionResult UpdateZohoIfNeeded(ZohoContact contact, Models.ZohoPartnerPortal partnerPortal, string oldPortalAdminContactId)
        {
            PortalActionResult result = new PortalActionResult();

            StringBuilder message = new StringBuilder();

            result.IsSuccess = false;

            var needUpdateContact       = true;
            var needUpdatePartnerPortal = true;
            var needUpdateOldContact    = false;
            //var needUpdateAccount = false;


            ZohoContact zohoOldAdminContact = null;

            if (!string.IsNullOrEmpty(oldPortalAdminContactId))
            {
                zohoOldAdminContact =
                    ZohoRepository.Contacts.FirstOrDefault(x => x.ContactID == oldPortalAdminContactId);
                if (zohoOldAdminContact.PortalAdmin)
                {
                    needUpdateOldContact = true;
                }
            }

            if (contact.PortalAdmin)
            {
                needUpdateContact = false;
                message.AppendLine("Portal Admin is true in Database, ignore update");
            }

            if (partnerPortal.ACLCreated.Equals("true", StringComparison.CurrentCultureIgnoreCase))
            {
                needUpdatePartnerPortal = false;
                message.AppendLine("Portal Portal ACL Created is true in Database, ignore update");
            }


            var account = ZohoRepository.Accounts.FirstOrDefault(x => x.AccountId == partnerPortal.PartnerAccount);

            if (account != null && account.PortalEnabled == false)
            {
                using (ZohoCRMProxy.ZohoCRMAccount accountRequest = new ZohoCRMProxy.ZohoCRMAccount(_zohoToken))
                {
                    try
                    {
                        var zAccount = new ZohoCRMProxy.ZohoAccount
                        {
                            Id            = partnerPortal.PartnerAccount,
                            PortalEnabled = true
                        };
                        accountRequest.Update(zAccount);
                        result.IsSuccess = true;
                        message.AppendLine("Zoho Account Updated.");
                    }
                    catch (Exception e)
                    {
                        result.IsSuccess = false;
                        message.AppendLine(e.Message);
                    }
                }
            }


            if (needUpdateContact || needUpdateOldContact)
            {
                var zohoContact = new ZohoCRMProxy.ZohoContact
                {
                    Id                   = contact.ContactID,
                    PortalAdmin          = true,
                    PartnerPortalEnabled = false,
                    SAPUnqualified       = contact.SAPUnqualified.Equals("true", StringComparison.CurrentCultureIgnoreCase),
                    EmailOptOut          = contact.EmailOptOut.Equals("true", StringComparison.CurrentCultureIgnoreCase),
                };

                using (ZohoCRMProxy.ZohoCRMContact request = new ZohoCRMContact(_zohoToken))
                {
                    try
                    {
                        if (needUpdateContact)
                        {
                            var contactResult = request.Update(zohoContact);

                            result.IsSuccess = true;
                            message.AppendLine("Zoho Contact Portal Admin Updated.");
                        }

                        if (needUpdateOldContact)
                        {
                            var oldAdminContactResult = request.Update(new ZohoCRMProxy.ZohoContact
                            {
                                Id                   = zohoOldAdminContact.ContactID,
                                PortalAdmin          = false,
                                PartnerPortalEnabled = true,
                                SAPUnqualified       =
                                    zohoOldAdminContact.SAPUnqualified.Equals("true",
                                                                              StringComparison.CurrentCultureIgnoreCase),
                                EmailOptOut =
                                    zohoOldAdminContact.EmailOptOut.Equals("true",
                                                                           StringComparison.CurrentCultureIgnoreCase),
                            });

                            result.IsSuccess = true;
                            message.AppendLine("Zoho Old Portal Admin Contact Updated.");
                        }
                    }
                    catch (Exception e)
                    {
                        result.IsSuccess = false;
                        message.AppendLine(e.Message);
                    }
                }
            }

            if (needUpdatePartnerPortal && result.IsSuccess)
            {
                var portal = new ZohoCRMProxy.ZohoPartnerPortal
                {
                    Id         = partnerPortal.PartnerPortalID,
                    ACLCreated = true
                };
                using (ZohoCRMProxy.ZohoCRMPartnerPortal portalRequest = new ZohoCRMProxy.ZohoCRMPartnerPortal(_zohoToken))
                {
                    try
                    {
                        portalRequest.Update(portal);
                        result.IsSuccess = true;
                        message.AppendLine("Zoho Partner Portal ACL Created Updated.");
                    }
                    catch (Exception e)
                    {
                        result.IsSuccess = false;
                        message.AppendLine(e.Message);
                    }
                }
            }



            result.Message = message.ToString();

            return(result);
        }
        private async Task <PortalActionResult> CreateUserAndAddUserAsPortalAdminAsync(ZohoContact contact,
                                                                                       int companyId)
        {
            bool   isSuccess = false;
            string message;

            var now      = DateTime.Now;
            var tempuser = new ApplicationUser()
            {
                UserName = contact.Email, Email = contact.Email, LastPasswordChangedDate = now, CreationDate = now, CompanyId = companyId
            };
            var result = await _userManager.CreateAsync(tempuser, _tempPassword);

            if (result.Succeeded)
            {
                var roleResult = await _userManager.AddToRoleAsync(tempuser, DefaultRoleName);

                var userContact = await _userManager.CreateUserZohoContactAsync(new UserZohoContact
                {
                    UserId        = tempuser.Id,
                    ZohoContactId = contact.ContactID
                });

                if (roleResult.Succeeded)
                {
                    isSuccess = true;
                    message   = $"User Created for:{tempuser.UserName}";
                }
                else
                {
                    message = roleResult.ToString();
                }
            }
            else
            {
                message = result.ToString();
            }

            return(new PortalActionResult
            {
                IsSuccess = isSuccess,
                Message = message
            });
        }