public override ActionResult Index([DefaultParameterValue(0)] int dummyint)
        {
            ActionResult r;

            try
            {
                if (VeelGebruikt.UniekeGroepGav(User.Identity.Name) != 0)
                {
                    // Redirect naar personenlijst van gevraagde groep;
                    r = RedirectToAction("Index", new { Controller = "Handleiding", groepID = VeelGebruikt.UniekeGroepGav(User.Identity.Name) });
                }
                else
                {
                    var model = new GavModel();
                    BaseModelInit(model, null);                        // null: nog geen groep gekozen

                    model.Titel = "Kies je Chirogroep";

                    // Als we hier crashen, kill dan de backend eens, zodat die wordt herstart.

                    model.GroepenLijst = ServiceHelper.CallService <IGroepenService, IEnumerable <GroepInfo> >
                                             (g => g.MijnGroepenOphalen());

                    r = View("Index", model);
                }
            }
            catch (FaultException <FoutNummerFault> ex)
            {
                r = RedirectToAction(ex.Detail.FoutNummer == FoutNummer.GeenDatabaseVerbinding ? "GeenVerbinding" : "Index", "Error");
            }

            return(r);
        }
        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
            }
        }