public override ActionResult Index(int groepID)
        {
            var gwj        = VeelGebruikt.GroepsWerkJaarOphalen(groepID);
            var werkjaarID = gwj.WerkJaarID;
            var model      = new GroepsInstellingenModel
            {
                Titel  = Properties.Resources.GroepsInstellingenTitel,
                Detail = ServiceHelper.CallService <IGroepenService, GroepDetail>(svc => svc.DetailOphalen(groepID)),
                NonActieveAfdelingen =
                    ServiceHelper.CallService <IGroepenService, List <AfdelingInfo> >(
                        svc => svc.OngebruikteAfdelingenOphalen(werkjaarID)),
                IsLive = VeelGebruikt.IsLive()
            };

            BaseModelInit(model, groepID);

            return(View(model));
        }
        protected void BaseModelInit(MasterViewModel model, int?groepID)
        {
            // Werken we op test of live?
            string login = User == null ? null : User.Identity.Name;

            model.IsLive        = VeelGebruikt.IsLive();
            model.DeveloperMode = Authenticator.WieBenIk().DeveloperMode;
            int adnr = Authenticator.WieBenIk().AdNr;

            model.Ik = VeelGebruikt.GebruikersDetail(adnr);

            if (!groepID.HasValue)
            {
                // De Gekozen groep is nog niet gekend, zet defaults
                model.GroepsNaam      = Resources.GroepsnaamDefault;
                model.Plaats          = Resources.GroepPlaatsDefault;
                model.StamNummer      = Resources.StamNrDefault;
                model.MeerdereGroepen = false;
                // model.GroepsCategorieen = new List<SelectListItem>();
            }
            else
            {
                #region gekozen groep en werkJaar

                var gwjDetail = VeelGebruikt.GroepsWerkJaarOphalen((int)groepID);

                model.GroepsNaam     = gwjDetail.GroepNaam;
                model.GroepsNiveau   = gwjDetail.GroepNiveau;
                model.Plaats         = gwjDetail.GroepPlaats;
                model.StamNummer     = gwjDetail.GroepCode;
                model.GroepID        = gwjDetail.GroepID;
                model.HuidigWerkJaar = gwjDetail.WerkJaar;
                model.WerkJaarStatus = gwjDetail.Status;

                #endregion

                #region GAV over meerdere groepen?

                // Als UniekeGroepGav een waarde heeft, is er maar één groep. Bij 0 zijn er meerdere.

                model.MeerdereGroepen = (VeelGebruikt.UniekeGroepGav(login) == 0);

                #endregion

                #region Mededelingen

                // Eerst algemene mededelingen

                if (gwjDetail.Status == WerkJaarStatus.InOvergang)
                {
                    var url = Url.Action("Index", "JaarOvergang");
                    model.Mededelingen.Add(new Mededeling
                    {
                        Type = MededelingsType.Probleem,
                        Info = String.Format(
                            Resources.WerkJaarInOvergang,
                            gwjDetail.WerkJaar + 1,
                            gwjDetail.WerkJaar + 2,
                            url)
                    });
                }

                var bivakstatus = VeelGebruikt.BivakStatusHuidigWerkjaarOphalen((int)groepID);
                VoegBivakStatusMededelingenToe(bivakstatus, model.Mededelingen);

                // Problemen opvragen
                var functieProblemen = VeelGebruikt.FunctieProblemenOphalen(gwjDetail.GroepID);
                var ledenProblemen   = VeelGebruikt.LedenProblemenOphalen(gwjDetail.GroepID);

                // Problemen vertalen naar model
                if (functieProblemen != null)
                {
                    foreach (var p in functieProblemen)
                    {
                        var bekijkMetFunctieUrl = Url.Action("Functie", "Leden",
                                                             new
                        {
                            groepsWerkJaarID = gwjDetail.WerkJaarID,
                            id      = p.ID,
                            groepID = groepID,
                        });
                        // Eerst een paar specifieke en veelvoorkomende problemen apart behandelen.
                        if (p.MinAantal > 0 && p.EffectiefAantal == 0)
                        {
                            var statusToekennenUrl = Url.Action("ZelfFunctiesToekennen", "Leden",
                                                                new
                            {
                                groepID = groepID,
                            });
                            model.Mededelingen.Add(new Mededeling
                            {
                                Type = MededelingsType.Probleem,
                                Info = string.Format(Resources.FunctieOntbreekt, p.Naam, p.Code, bekijkMetFunctieUrl, statusToekennenUrl)
                            });
                        }
                        else if (p.MaxAantal == 1 && p.EffectiefAantal > 1)
                        {
                            model.Mededelingen.Add(new Mededeling
                            {
                                Type = MededelingsType.Probleem,
                                Info = string.Format(Resources.FunctieMeerdereKeren, p.Naam, p.Code, p.EffectiefAantal, bekijkMetFunctieUrl)
                            });
                        }
                        // Dan de algemene foutmeldingen
                        else if (p.MinAantal > p.EffectiefAantal)
                        {
                            model.Mededelingen.Add(new Mededeling
                            {
                                Type = MededelingsType.Probleem,
                                Info = string.Format(Resources.FunctieTeWeinig, p.Naam, p.Code, p.EffectiefAantal, p.MinAantal, bekijkMetFunctieUrl)
                            });
                        }
                        else if (p.EffectiefAantal > p.MaxAantal)
                        {
                            model.Mededelingen.Add(new Mededeling
                            {
                                Type = MededelingsType.Probleem,
                                Info = string.Format(Resources.FunctieTeVeel, p.Naam, p.Code, p.EffectiefAantal, p.MinAantal, bekijkMetFunctieUrl)
                            });
                        }
                    }
                }

                if (ledenProblemen != null)
                {
                    foreach (var p in ledenProblemen)
                    {
                        string boodschap = String.Empty;
                        string url       = String.Empty;

                        switch (p.Probleem)
                        {
                        case LidProbleem.AdresOntbreekt:
                            boodschap = Resources.LedenZonderAdres;
                            url       = Url.Action("ZonderAdres", "Leden");
                            break;

                        case LidProbleem.EmailOntbreekt:
                            boodschap = Resources.LeidingZonderEmail;
                            url       = Url.Action("LeidingZonderMail", "Leden");
                            break;

                        case LidProbleem.EmailIsVerdacht:
                            boodschap = Resources.LedenMetVerdachteEmail;
                            url       = Url.Action("LedenMetVerdachteEmail", "Leden");
                            break;

                        case LidProbleem.TelefoonNummerOntbreekt:
                            boodschap = Resources.LedenZonderTelefoonNummer;
                            url       = Url.Action("ZonderTelefoon", "Leden");
                            break;

                        default:
                            Debug.Assert(false);
                            break;
                        }

                        model.Mededelingen.Add(new Mededeling
                        {
                            Type = MededelingsType.Probleem,
                            Info = String.Format(boodschap, p.Aantal, url)
                        });
                    }
                }

                #endregion
            }
        }