Пример #1
0
        private void Log(string noegleord, string niveau, string beskrivelse)
        {
            Begivenhed begivenhed = new Begivenhed();
            begivenhed.Niveau = niveau;
            begivenhed.MedlemID = KomponentManager.JegHarIndloggetMedlemIDOgArkID.IndloggetMedlemID;
            begivenhed.Applikationskontekst = KomponentManager.ApplikationKontekst.GivID();
            begivenhed.Beskrivelse = beskrivelse;
            begivenhed.Noegleord = noegleord;

            using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
            {
                db.Begivenheds.Add(begivenhed);
                db.SaveChanges();
            }
        }
Пример #2
0
        internal IndloggetMedlemBO(int arkID)
        {
            using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
            {
                Data = db.Medlems.FirstOrDefault(medlemItem => medlemItem.ArkID == arkID);
                if (Data == null)
                {
                    LogindStatus = MedlemLogindStatusEnum.UkendtMedlem;
                }
                else
                {
                    KendtRegnskabsmedlem = db.Regnskabsmedlems.First(medlemItem => medlemItem.ArkID == arkID);
                    Regnskabsmedlem      = KomponentManager.RegnskabsmedlemsManager.HentRegnskabsmedlem(arkID);
                    if (Regnskabsmedlem == null ||
                        Regnskabsmedlem.Status == MedlemsstatusEnum.Gammel)
                    {
                        LogindStatus = MedlemLogindStatusEnum.RegnskabsmedlemstatusGammel;
                    }
                    else
                    {
                        switch (Data.Status)
                        {
                        case MedlemsstatusEnum.Inaktiv:
                        case MedlemsstatusEnum.Aktiv:
                        {
                            ErRegnskabsdataOpdateret = MedlemmerManager.HarRegnskabsmedlemOgKendtRegnskabsmedlemSammeData(Regnskabsmedlem, KendtRegnskabsmedlem);
                            LogindStatus             = MedlemLogindStatusEnum.Succes;
                        } break;

                        case MedlemsstatusEnum.Gammel:
                        case MedlemsstatusEnum.IkkeAktiveret:
                        {
                            MedlemmerManager.OverskrivMedRegnskabsmedlemsdata(Regnskabsmedlem, KendtRegnskabsmedlem);
                            MedlemmerManager.OverskrivMedRegnskabsmedlemsdata(Regnskabsmedlem, Data);
                            Data.Status = Regnskabsmedlem.Status;
                            ErRegnskabsdataOpdateret = true;
                            LogindStatus             = MedlemLogindStatusEnum.Aktivering;
                        } break;

                        default:
                        {
                            throw new NotImplementedException("Data.Status = " + Data.Status);
                        }
                        }
                    }
                }
            }
        }
Пример #3
0
        private void Log(string noegleord, string niveau, string beskrivelse)
        {
            Begivenhed begivenhed = new Begivenhed();

            begivenhed.Niveau               = niveau;
            begivenhed.MedlemID             = KomponentManager.JegHarIndloggetMedlemIDOgArkID.IndloggetMedlemID;
            begivenhed.Applikationskontekst = KomponentManager.ApplikationKontekst.GivID();
            begivenhed.Beskrivelse          = beskrivelse;
            begivenhed.Noegleord            = noegleord;

            using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
            {
                db.Begivenheds.Add(begivenhed);
                db.SaveChanges();
            }
        }
Пример #4
0
 internal IndloggetMedlemBO(int arkID)
 {
     using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
     {
         Data = db.Medlems.FirstOrDefault(medlemItem => medlemItem.ArkID == arkID);
         if (Data == null)
         {
             LogindStatus = MedlemLogindStatusEnum.UkendtMedlem;
         }
         else
         {
             KendtRegnskabsmedlem = db.Regnskabsmedlems.First(medlemItem => medlemItem.ArkID == arkID);
             Regnskabsmedlem = KomponentManager.RegnskabsmedlemsManager.HentRegnskabsmedlem(arkID);
             if (Regnskabsmedlem == null ||
                 Regnskabsmedlem.Status == MedlemsstatusEnum.Gammel)
             {
                 LogindStatus = MedlemLogindStatusEnum.RegnskabsmedlemstatusGammel;
             }
             else
             {
                 switch (Data.Status)
                 {
                     case MedlemsstatusEnum.Inaktiv:
                     case MedlemsstatusEnum.Aktiv:
                         {
                             ErRegnskabsdataOpdateret = MedlemmerManager.HarRegnskabsmedlemOgKendtRegnskabsmedlemSammeData(Regnskabsmedlem, KendtRegnskabsmedlem);
                             LogindStatus = MedlemLogindStatusEnum.Succes;
                         }break;
                     case MedlemsstatusEnum.Gammel:
                     case MedlemsstatusEnum.IkkeAktiveret:
                         {
                             MedlemmerManager.OverskrivMedRegnskabsmedlemsdata(Regnskabsmedlem, KendtRegnskabsmedlem);
                             MedlemmerManager.OverskrivMedRegnskabsmedlemsdata(Regnskabsmedlem, Data);
                             Data.Status = Regnskabsmedlem.Status;
                             ErRegnskabsdataOpdateret = true;
                             LogindStatus = MedlemLogindStatusEnum.Aktivering;
                         }break;
                     default:
                         {
                             throw new NotImplementedException("Data.Status = " + Data.Status);
                         }
                 }
             }
         }
     }
 }
Пример #5
0
        public void OpdaterRostatistik()
        {
            using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
            {
                DateTime now            = DateTime.UtcNow;
                DateTime startSidsteAar = new DateTime(now.Year - 1, 1, 1);
                DateTime startDetteAar  = new DateTime(now.Year, 1, 1);
                db.Medlems.Attach(Data);
                db.Rostatistiks.Attach(Data.Rostatistik);

                var tureDetteAar =
                    db.Turs
                    .Where(turItem =>
                           turItem.StartTidspunkt > startDetteAar &&
                           db.Turdeltagers
                           .Where(turdeltagerItem => turdeltagerItem.MedlemID == Data.ID)
                           .Select(turdeltagerItem => turdeltagerItem.TurID).Contains(turItem.ID));

                Data.Rostatistik.KilometerDetteAar = 0;
                if (tureDetteAar.Count() > 0)
                {
                    Data.Rostatistik.KilometerDetteAar = tureDetteAar.Sum(turItem => turItem.AntalKilometer);
                }

                var tureSidsteAar =
                    db.Turs
                    .Where(turItem =>
                           turItem.StartTidspunkt > startSidsteAar &&
                           turItem.StartTidspunkt < startDetteAar &&
                           db.Turdeltagers
                           .Where(turdeltagerItem => turdeltagerItem.MedlemID == Data.ID)
                           .Select(turdeltagerItem => turdeltagerItem.TurID).Contains(turItem.ID));
                Data.Rostatistik.KilometerSidsteAar = 0;
                if (tureSidsteAar.Count() > 0)
                {
                    Data.Rostatistik.KilometerSidsteAar = tureSidsteAar.Sum(turItem => turItem.AntalKilometer);
                }
                db.SaveChanges();
            }
        }
Пример #6
0
        public void OpdaterRostatistik()
        {
            using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
            {
                DateTime now = DateTime.UtcNow;
                DateTime startSidsteAar = new DateTime(now.Year-1,1,1);
                DateTime startDetteAar = new DateTime(now.Year,1,1);
                db.Medlems.Attach(Data);
                db.Rostatistiks.Attach(Data.Rostatistik);

                var tureDetteAar =
                    db.Turs
                    .Where(turItem =>
                        turItem.StartTidspunkt > startDetteAar &&
                        db.Turdeltagers
                        .Where(turdeltagerItem => turdeltagerItem.MedlemID == Data.ID)
                        .Select(turdeltagerItem => turdeltagerItem.TurID).Contains(turItem.ID));

                Data.Rostatistik.KilometerDetteAar = 0;
                if (tureDetteAar.Count() > 0)
                {
                    Data.Rostatistik.KilometerDetteAar = tureDetteAar.Sum(turItem => turItem.AntalKilometer);
                }

                var tureSidsteAar =
                    db.Turs
                    .Where(turItem =>
                        turItem.StartTidspunkt > startSidsteAar &&
                        turItem.StartTidspunkt < startDetteAar &&
                        db.Turdeltagers
                        .Where(turdeltagerItem => turdeltagerItem.MedlemID == Data.ID)
                        .Select(turdeltagerItem => turdeltagerItem.TurID).Contains(turItem.ID));
                Data.Rostatistik.KilometerSidsteAar = 0;
                if (tureSidsteAar.Count() > 0)
                {
                    Data.Rostatistik.KilometerSidsteAar = tureSidsteAar.Sum(turItem => turItem.AntalKilometer);
                }
                db.SaveChanges();
            }
        }
Пример #7
0
        public void SynkroniserRegnskabsmedlemmerOgMedlemmer(bool validerLaesteRegnskabsmedlemmer = true)
        {
            StringBuilder logBeskedBygger = new StringBuilder();

            //¤¤¤ Tegnforklaring
            //¤¤¤ Tekst som står efter '//¤¤¤' er en kommentar
            //¤¤¤ Tekst som står efter '//' skal konverteres til kode

            //¤¤¤ Tre entiteter er vigtige i denne sammenhæng:
            //¤¤¤ Regnskabsmedlem: Læst direkte i regnskabssystemet
            //¤¤¤ KendtRegnskabsmedlem: Persisteret data fra siste gang regnskabssystemet leverede et opdateret Regnskabsmedlem
            //¤¤¤ Medlem: Brugeren (aktiveret eller ej) af websitet.
            //¤¤¤
            //¤¤¤ Disse tre entiteter har datafelter til fælles som defineret i ARK.Website.Common.RegnskabsmedlemDTO
            //¤¤¤ At to entiteter er ens betyder at datafelterne alle har samme værdi

            //¤¤¤ Status er vigtig i denne sammenhæng (ARK.Website.Common.Enum.MedlemsstatusEnum)
            //¤¤¤ Værdi IkkeAktiveret: Bruger som kan tilgå logbog og kan ses på websitet, men som aldrig har været logget på websitet
            //¤¤¤ Værdi Aktiv: Bruger som kan tilgå logbog og website
            //¤¤¤ Værdi Inaktiv: Bruger som kan tilgå website men ikke skrive til logbog (kan ikke få lov at ro/padle)
            //¤¤¤ Værdi Gammel: Bruger som kan tilgå hverken website eller logbog, men som stadig figurerer i rostatistik og website historik

            List<RegnskabsmedlemDTO> regnskabsmedlemmer = new List<RegnskabsmedlemDTO>();
            try
            {
                regnskabsmedlemmer = KomponentManager.RegnskabsmedlemsManager.HentRegnskabsmedlemmer();
            }
            catch (Exception exception)
            {
                logBeskedBygger.AppendLine("Læsning af regnskabsmedlemmer fejlede: " + exception.ToString() + Environment.NewLine);
            }

            //¤¤¤ Valider regnskabsmedlemmer så forfejlede retursvar ikke fortsætter. Kunne eksempelvis være antallet af læste aktive regnskabsmedlemmer
            int antalAktiveRegnskabsmedlemmer = regnskabsmedlemmer.Count(medlemsItem => medlemsItem.Status == Common.Enum.MedlemsstatusEnum.Aktiv);
            bool erRegnskabsmedlemmerLaesningValid = true;
            if (validerLaesteRegnskabsmedlemmer)
            {
                ErRegnskabsmedlemmerLaesningValid(regnskabsmedlemmer);
            }
            logBeskedBygger.AppendLine("Regnskabsmedlemmer læst: [Valid læsning:" + erRegnskabsmedlemmerLaesningValid + ";Antal:" + regnskabsmedlemmer.Count + ";Medlemsstatus-Aktiv:" + antalAktiveRegnskabsmedlemmer + "]" + Environment.NewLine);

            StringBuilder opdateretMedlemsbesked = new StringBuilder();
            if (erRegnskabsmedlemmerLaesningValid)
            {
                using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
                {
                    List<Medlem> medlemmer = db.Medlems.ToList();
                    List<Regnskabsmedlem> kendteRegnskabsmedlemmer = db.Regnskabsmedlems.ToList();

                    foreach (RegnskabsmedlemDTO regnskabsmedlem in regnskabsmedlemmer)
                    {
                        bool erOpdateret = false;
                        opdateretMedlemsbesked.Clear();
                        int arkID = regnskabsmedlem.ArkID;
                        opdateretMedlemsbesked.AppendLine("Regnskabsmedlem ArkID = " + arkID);
                        try
                        {
                            Regnskabsmedlem kendtRegnskabsmedlem = kendteRegnskabsmedlemmer.FirstOrDefault(regnskabsmedlemItem => regnskabsmedlemItem.ArkID == arkID);
                            Medlem medlem = medlemmer.FirstOrDefault(medlemItem => medlemItem.ArkID == arkID);

                            if (medlem == null || kendtRegnskabsmedlem == null)
                            {
                                if (medlem != null || kendtRegnskabsmedlem != null)
                                {
                                    throw new Exception("Fejl i modellen [ArkID=" + arkID + "]: Medlem = " + (medlem == null ? "Null" : "Not Null") + "; KendtRegnskabsmedlem = " + (kendtRegnskabsmedlem == null ? "Null" : "Not Null"));
                                }
                            }

                            if (medlem != null)
                            {
                                //¤¤¤ Endnu ikke aktiverede medlemmer holdes synkrone med regnskabssystemet
                                //¤¤¤ Gamle medlemmer, som kommmer tilbage i systemet, bliver behandlet som nye

                                MedlemsstatusEnum oprindeligMedlemsstatus = medlem.Status;
                                MedlemsstatusEnum oprindeligKendtRegnskabsmedlemsstatus = kendtRegnskabsmedlem.Status;
                                bool medlemsdataOverskrevet = false;
                                bool kendtRegnskabsmedlemsdataOverskrevet = false;
                                bool regnskabsmedlemDataEns = HarRegnskabsmedlemOgKendtRegnskabsmedlemSammeData(regnskabsmedlem, kendtRegnskabsmedlem);
                                if (!regnskabsmedlemDataEns)
                                {
                                    #region Opdatering af eksisterende Medlem og KendtRegnskabsmedlem data
                                    switch (regnskabsmedlem.Status)
                                    {
                                        case MedlemsstatusEnum.Aktiv:
                                            {
                                                switch (oprindeligMedlemsstatus)
                                                {
                                                    case MedlemsstatusEnum.Aktiv:
                                                        {
                                                            //Håndteret af bruger logon
                                                        } break;
                                                    case MedlemsstatusEnum.Inaktiv:
                                                        {
                                                            //Status i Regnskabsmedlem - tabellen skal opdateres
                                                            //Resten af ændringer i regnskabsmedlemsdata skal håndteres af bruger logon
                                                            kendtRegnskabsmedlem.Status = regnskabsmedlem.Status;
                                                            medlem.Status = regnskabsmedlem.Status;
                                                        } break;
                                                    case MedlemsstatusEnum.IkkeAktiveret:
                                                    case MedlemsstatusEnum.Gammel:
                                                        {
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);
                                                            medlem.Status = MedlemsstatusEnum.IkkeAktiveret;

                                                            medlemsdataOverskrevet = true;
                                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                                        } break;
                                                    default:
                                                        {
                                                            throw new NotSupportedException("Medlem.Status = " + oprindeligMedlemsstatus);
                                                        }
                                                }
                                            } break;
                                        case MedlemsstatusEnum.Inaktiv:
                                            {
                                                switch (oprindeligMedlemsstatus)
                                                {
                                                    case MedlemsstatusEnum.Inaktiv:
                                                        {
                                                            //Håndteret af bruger logon
                                                        } break;
                                                    case MedlemsstatusEnum.Aktiv:
                                                        {
                                                            //Status i Regnskabsmedlem - tabellen skal opdateres
                                                            //Resten af ændringer i regnskabsmedlemsdata skal håndteres af bruger logon
                                                            kendtRegnskabsmedlem.Status = regnskabsmedlem.Status;
                                                            medlem.Status = regnskabsmedlem.Status;
                                                        } break;
                                                    case MedlemsstatusEnum.IkkeAktiveret:
                                                    case MedlemsstatusEnum.Gammel:
                                                        {
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);
                                                            medlem.Status = MedlemsstatusEnum.IkkeAktiveret;

                                                            medlemsdataOverskrevet = true;
                                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                                        } break;
                                                    default:
                                                        {
                                                            throw new NotSupportedException("Medlem.Status = " + oprindeligMedlemsstatus);
                                                        }
                                                }
                                            } break;
                                        case MedlemsstatusEnum.Gammel:
                                            {
                                                switch (oprindeligMedlemsstatus)
                                                {
                                                    case MedlemsstatusEnum.IkkeAktiveret:
                                                        {
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);

                                                            medlemsdataOverskrevet = true;
                                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                                        } break;
                                                    case MedlemsstatusEnum.Aktiv:
                                                    case MedlemsstatusEnum.Inaktiv:
                                                    case MedlemsstatusEnum.Gammel:
                                                        {
                                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                                            medlem.Status = regnskabsmedlem.Status;

                                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                                        } break;
                                                    default:
                                                        {
                                                            throw new NotSupportedException("Medlem.Status = " + oprindeligMedlemsstatus);
                                                        }
                                                }
                                            } break;
                                        default:
                                            {
                                                throw new NotSupportedException("Regnskabsmedlem.Status = " + regnskabsmedlem.Status);
                                            }
                                    }
                                    #endregion
                                }

                                #region Logbesked generering
                                if (medlemsdataOverskrevet)
                                {
                                    opdateretMedlemsbesked.AppendLine("EKSISTERENDE MEDLEM OVERSKREVET FRA REGNSKABSSYSTEMET");
                                    erOpdateret = true;
                                }

                                if (medlem.Status != oprindeligMedlemsstatus)
                                {
                                    opdateretMedlemsbesked.AppendLine("MEDLEMSSTATUS ÆNDRET " + oprindeligMedlemsstatus + "=>" + medlem.Status);
                                    erOpdateret = true;
                                }

                                if (kendtRegnskabsmedlemsdataOverskrevet)
                                {
                                    opdateretMedlemsbesked.AppendLine("KENDT REGNSKABSMEDLEM OVERSKREVET FRA REGNSKABSSYSTEMET");
                                    erOpdateret = true;
                                }

                                if (kendtRegnskabsmedlem.Status != oprindeligKendtRegnskabsmedlemsstatus &&
                                    !kendtRegnskabsmedlemsdataOverskrevet)
                                {
                                    opdateretMedlemsbesked.AppendLine("KENDT REGNSKABSMEDLEM STATUS ÆNDRET " + oprindeligKendtRegnskabsmedlemsstatus + "=>" + kendtRegnskabsmedlem.Status);
                                    erOpdateret = true;
                                }
                                #endregion
                            }
                            else
                            {
                                #region Oprettelse af nyt Medlem og tilhørende KendtRegnskabsmedlem
                                medlem = new Medlem();
                                medlem.Rostatistik = new Rostatistik();
                                db.Medlems.Add(medlem);

                                kendtRegnskabsmedlem = new Regnskabsmedlem();
                                db.Regnskabsmedlems.Add(kendtRegnskabsmedlem);

                                OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);
                                OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);

                                if (regnskabsmedlem.Status != MedlemsstatusEnum.Gammel)
                                {
                                    medlem.Status = MedlemsstatusEnum.IkkeAktiveret;
                                }
                                else
                                {
                                    medlem.Status = MedlemsstatusEnum.Gammel;
                                }
                                #endregion

                                erOpdateret = true;
                                opdateretMedlemsbesked.AppendLine("NYT MEDLEM - STATUS = " + medlem.Status);
                            }

                            if (erOpdateret)
                            {
                                logBeskedBygger.AppendLine(opdateretMedlemsbesked.ToString());
                            }
                            db.SaveChanges();
                        }
                        catch (Exception exception)
                        {
                            logBeskedBygger.AppendLine("Fejl under kørsel af medlem ArkID = " + arkID + Environment.NewLine + exception.ToString() + Environment.NewLine);
                        }
                    }

                    try
                    {
                        //¤¤¤ de medlemmer som ikke længere får returneret et tilhørende regnskabsmedlem overgår til status gammel.
                        foreach (Medlem medlem in medlemmer.Where(medlemItem => medlemItem.Status != MedlemsstatusEnum.Gammel))
                        {
                            int arkID = medlem.ArkID;
                            RegnskabsmedlemDTO regnskabsmedlem = regnskabsmedlemmer.FirstOrDefault(regnskabsmedlemItem => regnskabsmedlemItem.ArkID == arkID);
                            if (regnskabsmedlem == null)
                            {
                                MedlemsstatusEnum oprindeligMedlemsstatus = medlem.Status;
                                medlem.Status = MedlemsstatusEnum.Gammel;
                                opdateretMedlemsbesked.AppendLine("Regnskabsmedlem ArkID = " + arkID);
                                opdateretMedlemsbesked.AppendLine("Regnskabsmedlem ikke eksisterende");
                                opdateretMedlemsbesked.AppendLine("MEDLEMSSTATUS ÆNDRET " + oprindeligMedlemsstatus + "=>" + medlem.Status);
                            }
                        }
                        db.SaveChanges();
                    }
                    catch (Exception exception)
                    {
                        logBeskedBygger.AppendLine("Fejl ved ændring af medlemmer status Gammel ved manglende regnskabsmedlem" + Environment.NewLine + exception.ToString() + Environment.NewLine);
                    }
                }
            }

            KomponentManager.LoggingManager.LogBesked(SYNKRONISERING_REGNSKAB_OG_MEDLEMMER_NOEGLEORD, logBeskedBygger.ToString());
        }
Пример #8
0
        public void SynkroniserRegnskabsmedlemmerOgMedlemmer(bool validerLaesteRegnskabsmedlemmer = true)
        {
            StringBuilder logBeskedBygger = new StringBuilder();

            //¤¤¤ Tegnforklaring
            //¤¤¤ Tekst som står efter '//¤¤¤' er en kommentar
            //¤¤¤ Tekst som står efter '//' skal konverteres til kode

            //¤¤¤ Tre entiteter er vigtige i denne sammenhæng:
            //¤¤¤ Regnskabsmedlem: Læst direkte i regnskabssystemet
            //¤¤¤ KendtRegnskabsmedlem: Persisteret data fra siste gang regnskabssystemet leverede et opdateret Regnskabsmedlem
            //¤¤¤ Medlem: Brugeren (aktiveret eller ej) af websitet.
            //¤¤¤
            //¤¤¤ Disse tre entiteter har datafelter til fælles som defineret i ARK.Website.Common.RegnskabsmedlemDTO
            //¤¤¤ At to entiteter er ens betyder at datafelterne alle har samme værdi

            //¤¤¤ Status er vigtig i denne sammenhæng (ARK.Website.Common.Enum.MedlemsstatusEnum)
            //¤¤¤ Værdi IkkeAktiveret: Bruger som kan tilgå logbog og kan ses på websitet, men som aldrig har været logget på websitet
            //¤¤¤ Værdi Aktiv: Bruger som kan tilgå logbog og website
            //¤¤¤ Værdi Inaktiv: Bruger som kan tilgå website men ikke skrive til logbog (kan ikke få lov at ro/padle)
            //¤¤¤ Værdi Gammel: Bruger som kan tilgå hverken website eller logbog, men som stadig figurerer i rostatistik og website historik

            List <RegnskabsmedlemDTO> regnskabsmedlemmer = new List <RegnskabsmedlemDTO>();

            try
            {
                regnskabsmedlemmer = KomponentManager.RegnskabsmedlemsManager.HentRegnskabsmedlemmer();
            }
            catch (Exception exception)
            {
                logBeskedBygger.AppendLine("Læsning af regnskabsmedlemmer fejlede: " + exception.ToString() + Environment.NewLine);
            }

            //¤¤¤ Valider regnskabsmedlemmer så forfejlede retursvar ikke fortsætter. Kunne eksempelvis være antallet af læste aktive regnskabsmedlemmer
            int  antalAktiveRegnskabsmedlemmer     = regnskabsmedlemmer.Count(medlemsItem => medlemsItem.Status == Common.Enum.MedlemsstatusEnum.Aktiv);
            bool erRegnskabsmedlemmerLaesningValid = true;

            if (validerLaesteRegnskabsmedlemmer)
            {
                ErRegnskabsmedlemmerLaesningValid(regnskabsmedlemmer);
            }
            logBeskedBygger.AppendLine("Regnskabsmedlemmer læst: [Valid læsning:" + erRegnskabsmedlemmerLaesningValid + ";Antal:" + regnskabsmedlemmer.Count + ";Medlemsstatus-Aktiv:" + antalAktiveRegnskabsmedlemmer + "]" + Environment.NewLine);

            StringBuilder opdateretMedlemsbesked = new StringBuilder();

            if (erRegnskabsmedlemmerLaesningValid)
            {
                using (ARK.Website.EntityFramework.Main.ArkDatabase db = new EntityFramework.Main.ArkDatabase())
                {
                    List <Medlem>          medlemmer = db.Medlems.ToList();
                    List <Regnskabsmedlem> kendteRegnskabsmedlemmer = db.Regnskabsmedlems.ToList();

                    foreach (RegnskabsmedlemDTO regnskabsmedlem in regnskabsmedlemmer)
                    {
                        bool erOpdateret = false;
                        opdateretMedlemsbesked.Clear();
                        int arkID = regnskabsmedlem.ArkID;
                        opdateretMedlemsbesked.AppendLine("Regnskabsmedlem ArkID = " + arkID);
                        try
                        {
                            Regnskabsmedlem kendtRegnskabsmedlem = kendteRegnskabsmedlemmer.FirstOrDefault(regnskabsmedlemItem => regnskabsmedlemItem.ArkID == arkID);
                            Medlem          medlem = medlemmer.FirstOrDefault(medlemItem => medlemItem.ArkID == arkID);

                            if (medlem == null || kendtRegnskabsmedlem == null)
                            {
                                if (medlem != null || kendtRegnskabsmedlem != null)
                                {
                                    throw new Exception("Fejl i modellen [ArkID=" + arkID + "]: Medlem = " + (medlem == null ? "Null" : "Not Null") + "; KendtRegnskabsmedlem = " + (kendtRegnskabsmedlem == null ? "Null" : "Not Null"));
                                }
                            }

                            if (medlem != null)
                            {
                                //¤¤¤ Endnu ikke aktiverede medlemmer holdes synkrone med regnskabssystemet
                                //¤¤¤ Gamle medlemmer, som kommmer tilbage i systemet, bliver behandlet som nye

                                MedlemsstatusEnum oprindeligMedlemsstatus = medlem.Status;
                                MedlemsstatusEnum oprindeligKendtRegnskabsmedlemsstatus = kendtRegnskabsmedlem.Status;
                                bool medlemsdataOverskrevet = false;
                                bool kendtRegnskabsmedlemsdataOverskrevet = false;
                                bool regnskabsmedlemDataEns = HarRegnskabsmedlemOgKendtRegnskabsmedlemSammeData(regnskabsmedlem, kendtRegnskabsmedlem);
                                if (!regnskabsmedlemDataEns)
                                {
                                    #region Opdatering af eksisterende Medlem og KendtRegnskabsmedlem data
                                    switch (regnskabsmedlem.Status)
                                    {
                                    case MedlemsstatusEnum.Aktiv:
                                    {
                                        switch (oprindeligMedlemsstatus)
                                        {
                                        case MedlemsstatusEnum.Aktiv:
                                        {
                                            //Håndteret af bruger logon
                                        } break;

                                        case MedlemsstatusEnum.Inaktiv:
                                        {
                                            //Status i Regnskabsmedlem - tabellen skal opdateres
                                            //Resten af ændringer i regnskabsmedlemsdata skal håndteres af bruger logon
                                            kendtRegnskabsmedlem.Status = regnskabsmedlem.Status;
                                            medlem.Status = regnskabsmedlem.Status;
                                        } break;

                                        case MedlemsstatusEnum.IkkeAktiveret:
                                        case MedlemsstatusEnum.Gammel:
                                        {
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);
                                            medlem.Status = MedlemsstatusEnum.IkkeAktiveret;

                                            medlemsdataOverskrevet = true;
                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                        } break;

                                        default:
                                        {
                                            throw new NotSupportedException("Medlem.Status = " + oprindeligMedlemsstatus);
                                        }
                                        }
                                    } break;

                                    case MedlemsstatusEnum.Inaktiv:
                                    {
                                        switch (oprindeligMedlemsstatus)
                                        {
                                        case MedlemsstatusEnum.Inaktiv:
                                        {
                                            //Håndteret af bruger logon
                                        } break;

                                        case MedlemsstatusEnum.Aktiv:
                                        {
                                            //Status i Regnskabsmedlem - tabellen skal opdateres
                                            //Resten af ændringer i regnskabsmedlemsdata skal håndteres af bruger logon
                                            kendtRegnskabsmedlem.Status = regnskabsmedlem.Status;
                                            medlem.Status = regnskabsmedlem.Status;
                                        } break;

                                        case MedlemsstatusEnum.IkkeAktiveret:
                                        case MedlemsstatusEnum.Gammel:
                                        {
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);
                                            medlem.Status = MedlemsstatusEnum.IkkeAktiveret;

                                            medlemsdataOverskrevet = true;
                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                        } break;

                                        default:
                                        {
                                            throw new NotSupportedException("Medlem.Status = " + oprindeligMedlemsstatus);
                                        }
                                        }
                                    } break;

                                    case MedlemsstatusEnum.Gammel:
                                    {
                                        switch (oprindeligMedlemsstatus)
                                        {
                                        case MedlemsstatusEnum.IkkeAktiveret:
                                        {
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);

                                            medlemsdataOverskrevet = true;
                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                        } break;

                                        case MedlemsstatusEnum.Aktiv:
                                        case MedlemsstatusEnum.Inaktiv:
                                        case MedlemsstatusEnum.Gammel:
                                        {
                                            OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);
                                            medlem.Status = regnskabsmedlem.Status;

                                            kendtRegnskabsmedlemsdataOverskrevet = true;
                                        } break;

                                        default:
                                        {
                                            throw new NotSupportedException("Medlem.Status = " + oprindeligMedlemsstatus);
                                        }
                                        }
                                    } break;

                                    default:
                                    {
                                        throw new NotSupportedException("Regnskabsmedlem.Status = " + regnskabsmedlem.Status);
                                    }
                                    }
                                    #endregion
                                }

                                #region Logbesked generering
                                if (medlemsdataOverskrevet)
                                {
                                    opdateretMedlemsbesked.AppendLine("EKSISTERENDE MEDLEM OVERSKREVET FRA REGNSKABSSYSTEMET");
                                    erOpdateret = true;
                                }

                                if (medlem.Status != oprindeligMedlemsstatus)
                                {
                                    opdateretMedlemsbesked.AppendLine("MEDLEMSSTATUS ÆNDRET " + oprindeligMedlemsstatus + "=>" + medlem.Status);
                                    erOpdateret = true;
                                }

                                if (kendtRegnskabsmedlemsdataOverskrevet)
                                {
                                    opdateretMedlemsbesked.AppendLine("KENDT REGNSKABSMEDLEM OVERSKREVET FRA REGNSKABSSYSTEMET");
                                    erOpdateret = true;
                                }


                                if (kendtRegnskabsmedlem.Status != oprindeligKendtRegnskabsmedlemsstatus &&
                                    !kendtRegnskabsmedlemsdataOverskrevet)
                                {
                                    opdateretMedlemsbesked.AppendLine("KENDT REGNSKABSMEDLEM STATUS ÆNDRET " + oprindeligKendtRegnskabsmedlemsstatus + "=>" + kendtRegnskabsmedlem.Status);
                                    erOpdateret = true;
                                }
                                #endregion
                            }
                            else
                            {
                                #region Oprettelse af nyt Medlem og tilhørende KendtRegnskabsmedlem
                                medlem             = new Medlem();
                                medlem.Rostatistik = new Rostatistik();
                                db.Medlems.Add(medlem);

                                kendtRegnskabsmedlem = new Regnskabsmedlem();
                                db.Regnskabsmedlems.Add(kendtRegnskabsmedlem);

                                OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, medlem);
                                OverskrivMedRegnskabsmedlemsdata(regnskabsmedlem, kendtRegnskabsmedlem);

                                if (regnskabsmedlem.Status != MedlemsstatusEnum.Gammel)
                                {
                                    medlem.Status = MedlemsstatusEnum.IkkeAktiveret;
                                }
                                else
                                {
                                    medlem.Status = MedlemsstatusEnum.Gammel;
                                }
                                #endregion

                                erOpdateret = true;
                                opdateretMedlemsbesked.AppendLine("NYT MEDLEM - STATUS = " + medlem.Status);
                            }

                            if (erOpdateret)
                            {
                                logBeskedBygger.AppendLine(opdateretMedlemsbesked.ToString());
                            }
                            db.SaveChanges();
                        }
                        catch (Exception exception)
                        {
                            logBeskedBygger.AppendLine("Fejl under kørsel af medlem ArkID = " + arkID + Environment.NewLine + exception.ToString() + Environment.NewLine);
                        }
                    }

                    try
                    {
                        //¤¤¤ de medlemmer som ikke længere får returneret et tilhørende regnskabsmedlem overgår til status gammel.
                        foreach (Medlem medlem in medlemmer.Where(medlemItem => medlemItem.Status != MedlemsstatusEnum.Gammel))
                        {
                            int arkID = medlem.ArkID;
                            RegnskabsmedlemDTO regnskabsmedlem = regnskabsmedlemmer.FirstOrDefault(regnskabsmedlemItem => regnskabsmedlemItem.ArkID == arkID);
                            if (regnskabsmedlem == null)
                            {
                                MedlemsstatusEnum oprindeligMedlemsstatus = medlem.Status;
                                medlem.Status = MedlemsstatusEnum.Gammel;
                                opdateretMedlemsbesked.AppendLine("Regnskabsmedlem ArkID = " + arkID);
                                opdateretMedlemsbesked.AppendLine("Regnskabsmedlem ikke eksisterende");
                                opdateretMedlemsbesked.AppendLine("MEDLEMSSTATUS ÆNDRET " + oprindeligMedlemsstatus + "=>" + medlem.Status);
                            }
                        }
                        db.SaveChanges();
                    }
                    catch (Exception exception)
                    {
                        logBeskedBygger.AppendLine("Fejl ved ændring af medlemmer status Gammel ved manglende regnskabsmedlem" + Environment.NewLine + exception.ToString() + Environment.NewLine);
                    }
                }
            }

            KomponentManager.LoggingManager.LogBesked(SYNKRONISERING_REGNSKAB_OG_MEDLEMMER_NOEGLEORD, logBeskedBygger.ToString());
        }