private StemmingenListVM GetStemmingData(StemmingenListVM stemmingenlistVM)
        {
            string   level     = " ";
            string   msg       = " ";
            string   title     = " ";
            DateTime stemdatum = stemmingenlistVM.StemDatum;
            string   wetid     = stemmingenlistVM.WetID;
            // Date + Wetid are given, get from the database what's there already

            var wetten = db.Wetten.Find(wetid);

            if (wetten == null)
            {
                //return stemmingenlistVM;
                TempData["BCmessage"]    = "Wet '" + wetid.Trim() + "' is onbekend...";
                TempData["BCerrorlevel"] = stemmingenlistVM.MessageSection.Error;

                RedirectToAction("Error");
            }
            // Determine which parties were active at that time
            var query1 = from p in db.Partijen
                         join j1 in db.PartijZetels on p.PartijID equals j1.PartijID
                         where ((j1.VanDatum <= stemdatum) && (j1.TotDatum >= stemdatum))
                         select new
            {
                p.PartijID,
                p.PartijNaam,
                j1.AantalZetels,
                j1.VanDatum,
                j1.TotDatum
            };

            var actievepartijen = query1.ToList();

            stemmingenlistVM.ModelOk = true;
            if (actievepartijen.Count == 0)
            {
                level = stemmingenlistVM.MessageSection.Error;
                msg   = "Op de gegeven datum zijn geen partijen actief in de Tweede Kamer";
                stemmingenlistVM.MessageSection.SetMessage(title, level, msg);
                StemObject so = new StemObject
                {
                    WetID           = wetten.WetID,
                    WetNaam         = wetten.WetNaam,
                    WetLink         = wetten.WetLink,
                    WetOmschrijving = wetten.WetOmschrijving,
                    WetType         = wetten.WetType
                };
                List <StemObject> sl = new List <StemObject>();
                sl.Add(so);

                stemmingenlistVM.Fill(sl);

                stemmingenlistVM.ModelOk  = false;
                stemmingenlistVM.ZetelsOk = false;
                return(stemmingenlistVM);
            }

            // Check if the active parties have exactly 150 seats in total
            stemmingenlistVM.ZetelsOk = true;
            int totalseats = 0;

            foreach (var activeparty in actievepartijen)
            {
                totalseats = totalseats + activeparty.AantalZetels;
            }
            if (totalseats != 150)
            {
                level = stemmingenlistVM.MessageSection.Error;
                msg   = "Op de opgegeven datum hebben de gezamenlijke partijen " + totalseats.ToString() + " zetels i.p.v. 150. Corrigeer dit eerst!";
                stemmingenlistVM.MessageSection.SetMessage(title, level, msg);
                stemmingenlistVM.ZetelsOk = false;
            }

            var query3 = from s in db.Stemmingen
                         where (s.WetID == wetid) && (s.StemDatum == stemdatum)
                         select new
            {
                PartijID  = s.PartijID,
                StemDatum = s.StemDatum,
                Voor      = s.Voor,
                Tegen     = s.Tegen,
                Blanco    = s.Blanco
            };

            var bestaandestemmingen = query3.ToList();

            var combine = from a in actievepartijen
                          join b in bestaandestemmingen on a.PartijID equals b.PartijID into joinedList
                          from sub in joinedList.DefaultIfEmpty()
                          select new StemObject
            {
                StemDatum       = stemdatum,
                WetID           = wetten.WetID,
                WetLink         = wetten.WetLink,
                WetNaam         = wetten.WetNaam,
                WetType         = wetten.WetType,
                WetOmschrijving = wetten.WetOmschrijving,
                PartijID        = a.PartijID,
                PartijNaam      = a.PartijNaam,
                PartijZetels    = a.AantalZetels,
                Voor            = sub == null ? 0 : sub.Voor,
                Tegen           = sub == null ? 0 : sub.Tegen,
                Blanco          = sub == null ? 0 : sub.Blanco
            };

            List <StemObject> vmlist = combine.ToList();

            stemmingenlistVM.Fill(vmlist);
            int tot = stemmingenlistVM.TotaalBlanco + stemmingenlistVM.TotaalVoor + stemmingenlistVM.TotaalTegen;

            if (tot == 0)
            {
                title = "Stemming TOEVOEGEN";
            }
            else
            {
                title = "BESTAANDE stemming WIJZIGEN";
            }

            if (stemmingenlistVM.ZetelsOk)
            {
                level = stemmingenlistVM.MessageSection.Info;
                msg   = "Vul de stemgegevens in voor elke partij bij deze wet en selecteer OPSLAAN";

                stemmingenlistVM.MessageSection.SetMessage(title, level, msg);
            }
            return(stemmingenlistVM);
        }
        // GET: Stemmingen/Create/5
        public ActionResult Create(string wetid, DateTime stemdatum)
        {
            StemmingenListVM stemmingenlistVM = new StemmingenListVM();

            stemmingenlistVM.WetID     = wetid;
            stemmingenlistVM.StemDatum = stemdatum;
            string title = "Stemming toevoegen of wijzigen";
            string msg   = " ";
            string level = " ";

            if (wetid == null)
            {
                TempData["BCmessage"]    = "Specificeer een geldige WetID";
                TempData["BCerrorlevel"] = stemmingenlistVM.MessageSection.Error;

                return(RedirectToAction("Error"));
            }
            Wetten wet = db.Wetten.Find(wetid);

            if (wet == null)
            {
                TempData["BCmessage"]    = "WetID '" + wetid.Trim() + "' is niet gevonden";
                TempData["BCerrorlevel"] = stemmingenlistVM.MessageSection.Error;

                return(RedirectToAction("Error"));
            }

            // if date not given, prompt for it

            if (stemdatum == DateTime.MinValue)
            {
                msg   = "Specificeer de stemdatum voor deze wet";
                level = stemmingenlistVM.MessageSection.Info;
                stemmingenlistVM.WetID     = wetid;
                stemmingenlistVM.StemDatum = DateTime.Now;
                StemObject so = new StemObject
                {
                    WetID           = wet.WetID,
                    WetNaam         = wet.WetNaam,
                    WetType         = wet.WetType,
                    WetLink         = wet.WetLink,
                    WetOmschrijving = wet.WetOmschrijving
                };
                List <StemObject> sl = new List <StemObject>();
                sl.Add(so);

                stemmingenlistVM.Fill(sl);
                stemmingenlistVM.MessageSection.SetMessage(title, level, msg);

                return(View("Create", stemmingenlistVM));
            }
            else // Date is given, so present directly the edit screen for Stemming
            {
                stemmingenlistVM = GetStemmingData(stemmingenlistVM);
                if ((stemmingenlistVM.ModelOk) || (stemmingenlistVM.ZetelsOk))
                {
                    return(View("CreatEdit", stemmingenlistVM));
                }
                else
                {
                    return(View(stemmingenlistVM));
                }
            }
        }