private bool UpdateContactInformation(ContactObjects.RootObject customerInsightsContactInfo, User currentContactInfo, int organizationParentId)
        {
            bool   isTitleUpdated    = false;
            bool   isLinkedInUpdated = false;
            string useSocialProfile  = CustomerInsightsUtilities.SocialProfiles.LinkedIn.ToString();

            if (customerInsightsContactInfo.socialProfiles != null && customerInsightsContactInfo.socialProfiles.Count > 0)
            {
                if (!customerInsightsContactInfo.socialProfiles.Exists(p => p.typeName.ToLower() == CustomerInsightsUtilities.SocialProfiles.LinkedIn.ToString().ToLower()))
                {
                    Logs.WriteEvent("LinkedIn not found");
                }
                else
                {
                    ContactObjects.SocialProfile contactInfo = customerInsightsContactInfo.socialProfiles.Where(p => p.typeName.ToLower() == useSocialProfile.ToLower()).FirstOrDefault();
                    if (contactInfo != null && CanUpdateContactLinkedIn(currentContactInfo, contactInfo.url))
                    {
                        currentContactInfo.LinkedIn = contactInfo.url;
                        isLinkedInUpdated           = true;
                    }
                }
            }
            else
            {
                Logs.WriteEvent("No social profile found");
            }

            if (customerInsightsContactInfo.organizations != null && customerInsightsContactInfo.organizations.Count > 0)
            {
                ContactObjects.Organization organization = customerInsightsContactInfo.organizations.Where(p => p.isPrimary).FirstOrDefault();
                if (organization != null && CanUpdateContactTitle(currentContactInfo, organization.title))
                {
                    currentContactInfo.Title = organization.title;
                    isTitleUpdated           = true;
                }
            }
            else
            {
                Logs.WriteEvent("No organizations found");
            }

            if (isLinkedInUpdated || isTitleUpdated)
            {
                currentContactInfo.Collection.Save();
                string description = string.Empty;

                if (isLinkedInUpdated)
                {
                    Logs.WriteEventFormat("LinkedIn updated to {0}", currentContactInfo.LinkedIn);
                    description = string.Format("TeamSupport System changed LinkedIn to {0} ", currentContactInfo.LinkedIn);
                    ActionLogs.AddActionLog(LoginUser, ActionLogType.Update, ReferenceType.Users, currentContactInfo.UserID, description);
                }

                if (isTitleUpdated)
                {
                    Logs.WriteEventFormat("Title updated to {0}", currentContactInfo.Title);
                    description = string.Format("TeamSupport System set contact title to {0} ", currentContactInfo.Title);
                    ActionLogs.AddActionLog(LoginUser, ActionLogType.Update, ReferenceType.Users, currentContactInfo.UserID, description);
                }
            }

            string usePhotoFrom = CustomerInsightsUtilities.SocialProfiles.LinkedIn.ToString();
            string photoUrl     = string.Empty;

            if (customerInsightsContactInfo.photos != null && customerInsightsContactInfo.photos.Any())
            {
                if (customerInsightsContactInfo.photos.Exists(p => p.typeName.ToLower() == usePhotoFrom.ToLower()))
                {
                    photoUrl = customerInsightsContactInfo.photos.Where(p => p.typeName.ToLower() == usePhotoFrom.ToLower() && !string.IsNullOrEmpty(p.url)).Select(p => p.url).FirstOrDefault();
                }

                if (string.IsNullOrEmpty(photoUrl))
                {
                    photoUrl = customerInsightsContactInfo.photos.Where(p => !string.IsNullOrEmpty(p.url)).Select(p => p.url).FirstOrDefault();
                }
            }

            if (!string.IsNullOrEmpty(photoUrl))
            {
                string resultMessage = string.Empty;
                string logoPath      = TeamSupport.Data.Quarantine.ServiceQ.GetAttachmentPath12(LoginUser, organizationParentId);
                string logoFullPath  = string.Format("{0}\\{1}avatar.jpg", logoPath, currentContactInfo.UserID.ToString());

                if (CustomerInsightsUtilities.DownloadImage(photoUrl, logoFullPath, currentContactInfo.OrganizationID, AttachmentProxy.References.Contacts, LoginUser, out resultMessage))
                {
                    string description = "TeamSupport System updated Photo for  '" + currentContactInfo.DisplayName + "'";
                    ActionLogs.AddActionLog(LoginUser, ActionLogType.Update, ReferenceType.Users, currentContactInfo.UserID, description);

                    //delete cached image
                    string cachePath = string.Empty;
                    string pattern   = string.Empty;
                    try
                    {
                        cachePath = TeamSupport.Data.Quarantine.ServiceQ.GetAttachmentPath13(LoginUser, organizationParentId);
                        pattern   = currentContactInfo.UserID.ToString() + "-*.*";
                        string[] files = System.IO.Directory.GetFiles(cachePath, pattern, System.IO.SearchOption.TopDirectoryOnly);

                        foreach (String file in files)
                        {
                            System.IO.File.Delete(file);
                        }
                    }
                    catch (Exception ex)
                    {
                        Logs.WriteEvent("Exception deleting cached images for contact.");
                        Logs.WriteEventFormat("CachePath: {0}", cachePath.ToString());
                        Logs.WriteEventFormat("Pattern: {0}", pattern.ToString());
                        Logs.WriteEventFormat("Exception Message: {0}", ex.Message.ToString());
                        Logs.WriteEventFormat("Exception StackTrace: {0}", ex.StackTrace.ToString());
                    }
                }

                if (!string.IsNullOrEmpty(resultMessage))
                {
                    Logs.WriteEvent(resultMessage);
                }
            }
            else
            {
                Logs.WriteEvent("No photo url found");
            }

            return(isLinkedInUpdated || isTitleUpdated);
        }
        private bool UpdateCompanyInformation(CompanyObjects.RootObject customerInsightsOrganizationInfo, Organization currentCompanyInfo)
        {
            bool   isUpdated        = false;
            string useSocialProfile = CustomerInsightsUtilities.SocialProfiles.LinkedIn.ToString();

            if (customerInsightsOrganizationInfo.socialProfiles != null && customerInsightsOrganizationInfo.socialProfiles.Count > 0)
            {
                //We will use LinkedIn for bio, if not found then use the first one of the others with that information
                if (!customerInsightsOrganizationInfo.socialProfiles.Exists(p => p.typeName.ToLower() == useSocialProfile.ToLower()))
                {
                    useSocialProfile = string.Empty;
                    useSocialProfile = customerInsightsOrganizationInfo.socialProfiles.Where(p => !string.IsNullOrEmpty(p.bio)).Select(p => p.typeName).FirstOrDefault();
                }

                if (!string.IsNullOrEmpty(useSocialProfile))
                {
                    string bio = customerInsightsOrganizationInfo.socialProfiles.Where(p => p.typeName.ToLower() == useSocialProfile.ToLower() && !string.IsNullOrEmpty(p.bio)).Select(p => p.bio).FirstOrDefault();

                    if (CanUpdateCompanyBio(currentCompanyInfo, bio))
                    {
                        currentCompanyInfo.Description = bio;
                        isUpdated = true;
                    }
                }
                else
                {
                    Logs.WriteEvent("No bio found in any of the social profiles");
                }
            }
            else
            {
                Logs.WriteEvent("No social profile found");
            }


            if (!string.IsNullOrEmpty(customerInsightsOrganizationInfo.logo))
            {
                string resultMessage = string.Empty;
                string logoPath      = TeamSupport.Data.Quarantine.ServiceQ.GetAttachmentPath10(LoginUser, (int)currentCompanyInfo.ParentID);
                string logoFullPath  = string.Format("{0}\\{1}.png", logoPath, currentCompanyInfo.OrganizationID);

                if (CustomerInsightsUtilities.DownloadImage(customerInsightsOrganizationInfo.logo, logoFullPath, currentCompanyInfo.OrganizationID, AttachmentProxy.References.Organizations, LoginUser, out resultMessage))
                {
                    string description = string.Format("TeamSupport System updated Logo for '{0}'", currentCompanyInfo.Name);
                    ActionLogs.AddActionLog(LoginUser, ActionLogType.Update, ReferenceType.Organizations, currentCompanyInfo.OrganizationID, description);

                    //delete cached image
                    string cachePath = string.Empty;
                    string pattern   = string.Empty;
                    try
                    {
                        cachePath = TeamSupport.Data.Quarantine.ServiceQ.GetAttachmentPath11(LoginUser, currentCompanyInfo.ParentID.ToString());

                        if (System.IO.Directory.Exists(cachePath))
                        {
                            pattern = currentCompanyInfo.OrganizationID.ToString() + "-*.*";
                            string[] files = System.IO.Directory.GetFiles(cachePath, pattern, System.IO.SearchOption.TopDirectoryOnly);

                            foreach (String file in files)
                            {
                                System.IO.File.Delete(file);
                                Logs.WriteEvent(string.Format("Cached file {0} deleted.", file));
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Logs.WriteEvent("Exception deleting cached images for company.");
                        Logs.WriteEventFormat("CachePath: {0}", cachePath.ToString());
                        Logs.WriteEventFormat("Pattern: {0}", pattern.ToString());
                        Logs.WriteEventFormat("Exception Message: {0}", ex.Message.ToString());
                        Logs.WriteEventFormat("Exception StackTrace: {0}", ex.StackTrace.ToString());
                    }
                }

                if (!string.IsNullOrEmpty(resultMessage))
                {
                    Logs.WriteEvent(resultMessage);
                }
            }
            else
            {
                Logs.WriteEvent("No logo found");
            }

            if (isUpdated)
            {
                currentCompanyInfo.Collection.Save();
                Logs.WriteEvent(string.Format("Bio pulled from {0}", useSocialProfile));
                string description = "TeamSupport System changed description for organization '" + currentCompanyInfo.Name + "'";
                ActionLogs.AddActionLog(LoginUser, ActionLogType.Update, ReferenceType.Organizations, currentCompanyInfo.OrganizationID, description);
            }

            return(isUpdated);
        }