public static bool ArchiveRootFolderExists(Outlook.NameSpace sessionNamespace, BrugerInfo brugerInfo)
        {
            using (var _dc = new iorunEntities())
            {
                var userSettings = _dc.UserSettings.Where(us => us.US_UserGUID == brugerInfo.ID).ToList().Single();
                var rootArchiveFolderStoreID = userSettings.US_ExchangeStore;
                var rootArchiveFolderEntryID = userSettings.US_ExchangeEntry;

                try
                {
                    var rootArchiveFolder = sessionNamespace.GetFolderFromID(rootArchiveFolderEntryID, rootArchiveFolderStoreID);
                    if (rootArchiveFolder == null)
                    {
                        return false;
                    }

                    return true;
                }
                catch (COMException ce)
                {
                    log.Info(string.Format("ArchiveRootFolderExists: Findes ikke. COM fejl: {0}", ce.Message), ce);

                    return false;
                }
            }
        }
        public static bool ArchiveSelectedItem(bool treatAtSentMail, BrugerInfo currentBruger, Outlook.MailItem mailItem, MailItemInfo mailItemInfo, KundeInfo companyInfo, KontaktInfo contactInfo, TaskInfo taskInfo, Outlook.NameSpace sessionNamespace)
        {
            var fromBruger = treatAtSentMail ? currentBruger : null;
            var toBruger = treatAtSentMail ? currentBruger : null;
            var documentType = treatAtSentMail ? DocumentType.SentMail : DocumentType.ReceivedMail;
            var documentGuid = Guid.NewGuid();

            var companyFolder = TryGetCompanyOutlookFolder(companyInfo.ID, currentBruger, sessionNamespace);

            // Vi har muligvis ikke rettigheder til at tilgå eller oprette mappen
            // Brugeren har fået besked så vi kan returnere
            if (companyFolder == null)
            {
                return false;
            }

            SetIOfficeProperties(documentGuid, mailItem);

            dynamic archivedItemDynamic;

            var itemCopy = (Outlook.MailItem)mailItem.Copy();

            archivedItemDynamic = itemCopy.Move(companyFolder);

            var archivedItem = (Outlook.MailItem)archivedItemDynamic;

            // Efter move får item nyt entryID og storeID
            mailItemInfo = new MailItemInfo(archivedItem);

            var mailItemDocument = new IOfficeOutlookAddIn.Document()
            {
                DOC_Body = mailItemInfo.BodyPlainText,
                DOC_CompanyGUID = companyInfo.ID,
                DOC_ContactGUID = contactInfo != null ? contactInfo.ID : new Nullable<Guid>(),
                DOC_CreatedByGUID = currentBruger.ID,
                DOC_CreatedDate = DateTime.Now,
                DOC_DocumentType = (int)documentType,
                DOC_ExchangeEntryID = mailItemInfo.CurrentMailItemEntryID,
                DOC_ExchangeFolderEntryID = null, // BRUGES IKKE
                DOC_ExchangeFolderStoreID = null, // BRUGES IKKE
                DOC_ExchangeStoreID = mailItemInfo.CurrentMailItemFolderStoreID,
                DOC_FromUserGUID = fromBruger != null ? fromBruger.ID : new Nullable<Guid>(),
                DOC_GUID = documentGuid,
                DOC_IsArchived = 1,
                DOC_IsInstantiated = 1,
                DOC_IsPrivate = 0,
                DOC_MailCreatedDatetime = mailItemInfo.Created,
                DOC_MailReceivedDatetime = mailItemInfo.Received,
                DOC_MailSentDatetime = mailItemInfo.Sent,
                DOC_MailUpdatedDatetime = DateTime.Now, // Hvad er det?
                DOC_MasterDate = DateTime.Now, // Hvad er det?
                DOC_OriginalFileName = string.Empty,
                DOC_ProjectGUID = null,
                DOC_SMTP_From = mailItemInfo.FromEmailAddress,
                DOC_SMTP_FromDisplayName = string.IsNullOrEmpty(mailItemInfo.FromDisplayName) == false ? mailItemInfo.FromDisplayName : treatAtSentMail == true ? fromBruger.Navn : "(Unknown)",
                DOC_SMTP_To = mailItemInfo.RecipientsEmailAddress,
                DOC_SMTP_ToDisplayName = mailItemInfo.RecipientsDisplayName,
                DOC_Subject = mailItemInfo.Subject,
                DOC_TaskGUID = taskInfo != null ? taskInfo.ID : new Nullable<Guid>(),
                DOC_TemplateGUID = null,
                DOC_Title = null, // Bruges vist ikke hvis mail
                DOC_ToUserGUID = toBruger != null ? toBruger.ID : new Nullable<Guid>(),
                DOC_TypeGUID = new Nullable<Guid>(), // BRUGES IKKE
                DOC_UpdatedByGUID = currentBruger.ID,
                DOC_UpdatedDate = DateTime.Now,
                DOC_WebVisible = 0,
                IsThrash = 0
            };

            using (var _dc = new iorunEntities())
            {
                _dc.Document.Add(mailItemDocument);

                _dc.SaveChanges();
            }

            return true;
        }
        public static Outlook.MAPIFolder TryGetCompanyOutlookFolder(Guid companyID, BrugerInfo brugerInfo, Outlook.NameSpace sessionNamespace)
        {
            using (var _dc = new iorunEntities())
            {
                var kunde = _dc.Kunder.Where(k => k.Kunde_GUID == companyID).ToList().Single();
                var userSettings = _dc.UserSettings.Where(us => us.US_UserGUID == brugerInfo.ID).ToList().Single();

                var companyArchiveFolderEntryID = kunde.Kunde_EntryID;
                var companyArchiveFolderStoreID = kunde.Kunde_StoreID;

                var rootArchiveFolderStoreID = userSettings.US_ExchangeStore;
                var rootArchiveFolderEntryID = userSettings.US_ExchangeEntry;

                var companyFolderName = kunde.Kunde_Navn_1.Trim();
                var folderLetter = companyFolderName[0];

                var rootArchiveFolder = sessionNamespace.GetFolderFromID(rootArchiveFolderEntryID, rootArchiveFolderStoreID);
                if (rootArchiveFolder == null)
                {
                    throw new ApplicationException("Failed to get root folder for archive");
                }

                var letterFolder = GetSubFolderByName(rootArchiveFolder, folderLetter.ToString());
                if (letterFolder == null)
                {
                    letterFolder = rootArchiveFolder.Folders.Add(folderLetter.ToString());
                }

                var companyFolder = GetSubFolderByName(letterFolder, companyFolderName);
                if (companyFolder == null)
                {
                    try
                    {
                        companyFolder = letterFolder.Folders.Add(companyFolderName);
                    }
                    catch (COMException comException)
                    {
                        log.Error(comException);

                        MessageBox.Show(string.Format("Du har ikke rettighed til at tilgå eller oprette mappen\n\nFejlen var: {0}", comException.Message), "Adgang nægtet", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    }
                }

                return companyFolder;
            }
        }
        public static BrugerInfo GetCurrentBruger()
        {
            if (_brugerInfo == null)
            {
                using (var dc = new iorunEntities())
                {
                    log.InfoFormat("GetCurrentBruger(): Finder bruger med username = {0}. Connection string = {1}", Environment.UserName, dc.Database.Connection.ConnectionString);

                    // Grunden til der bruges WHere og ikke SingleOrDefault() er pga. SQL server compatibility
                    var brugere = dc.Bruger.Where(br => br.User_LoginID == Environment.UserName).ToList();

                    if (brugere.Count == 1)
                    {
                        _brugerInfo = new BrugerInfo(brugere.Single());
                    }
                    else
                    {
                        log.InfoFormat("GetCurrentBruger(): {0} brugere matchede", brugere.Count);
                        // NOP
                    }
                }
            }

            return _brugerInfo;
        }