示例#1
0
 public vm_functie(GmmDbContext pContext)
 {
     _context = pContext;
     _functie = new Functie {
         Id = 0
     };
 }
示例#2
0
 public Taak(int taakId, int pid, double uur, Functie functie)
 {
     Pid     = pid;
     Uur     = uur;
     Functie = functie;
     Taken   = new List <Taak>();
 }
        public void ContactZonderEmail()
        {
            // ARRANGE

            var groepsWerkJaar = new GroepsWerkJaar {
                Groep = new ChiroGroep(), WerkJaar = 2012
            };

            groepsWerkJaar.Groep.GroepsWerkJaar.Add(groepsWerkJaar);

            var contactPersoonFunctie = new Functie
            {
                ID          = (int)NationaleFunctie.ContactPersoon,
                MinAantal   = 1,
                IsNationaal = true,
                Niveau      = Niveau.LeidingInGroep,
            };
            var lid = new Leiding
            {
                GroepsWerkJaar   = groepsWerkJaar,
                GelieerdePersoon = new GelieerdePersoon()
            };

            var functiesManager = Factory.Maak <FunctiesManager>();
            // ASSERT

            var ex = Assert.Throws <FoutNummerException>(
                () => functiesManager.Toekennen(lid, new List <Functie> {
                contactPersoonFunctie
            }));

            Assert.AreEqual(FoutNummer.EMailVerplicht, ex.FoutNummer);
        }
        public void NietToegekendeVerplichteFunctie()
        {
            // ARRANGE

            var g = new ChiroGroep();

            // een (eigen) functie waarvan er precies 1 moet zijn
            var f = new Functie
            {
                MinAantal   = 1,
                Type        = LidType.Alles,
                ID          = 1,
                IsNationaal = false,
                Niveau      = Niveau.Alles,
                Groep       = g,
            };

            // groepswerkjaar zonder leden
            var gwj = new GroepsWerkJaar
            {
                Lid   = new List <Lid>(),
                Groep = g
            };

            // Maak een functiesmanager
            var fm = Factory.Maak <FunctiesManager>();


            // ACT
            var problemen = fm.AantallenControleren(gwj, new[] { f });

            // ASSERT
            Assert.IsTrue(problemen.Any(prb => prb.ID == f.ID));
        }
示例#5
0
        public async Task <IActionResult> Edit(long id, [Bind("Id,Nume,Descriere")] Functie functie)
        {
            if (id != functie.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(functie);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!FunctieExists(functie.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction(nameof(Index)));
            }
            return(View(functie));
        }
        public void AantallenControlerenBeperkTest()
        {
            // ARRANGE

            var functie1 = new Functie {
                MaxAantal = 1
            };
            var functie2 = new Functie();

            var groepsWerkJaar = new GroepsWerkJaar();

            groepsWerkJaar.Lid.Add(new Leiding {
                Functie = new List <Functie> {
                    functie1
                }
            });
            groepsWerkJaar.Lid.Add(new Leiding {
                Functie = new List <Functie> {
                    functie1
                }
            });                                                                              // 2 personen met de functie

            // ACT

            var target = Factory.Maak <FunctiesManager>();
            var actual = target.AantallenControleren(groepsWerkJaar, new List <Functie> {
                functie2
            });

            // controleer enkel op functie2.

            // ASSERT

            Assert.AreEqual(0, actual.Count);
        }
        public void ToekennenFunctieOngeldigWerkJaar()
        {
            // ARRANGE

            var groepsWerkJaar = new GroepsWerkJaar
            {
                Groep    = new ChiroGroep(),
                WerkJaar = 2012
            };

            groepsWerkJaar.Groep.GroepsWerkJaar.Add(groepsWerkJaar);
            var lid = new Leiding {
                GroepsWerkJaar = groepsWerkJaar
            };

            var vervallenFunctie = new Functie
            {
                WerkJaarTot = groepsWerkJaar.WerkJaar - 1,
                MinAantal   = 1,
                Groep       = groepsWerkJaar.Groep,
                Niveau      = Niveau.Groep
            };

            var functiesManager = Factory.Maak <FunctiesManager>();

            // ASSERT

            Assert.Throws <FoutNummerException>(() => functiesManager.Toekennen(lid, new List <Functie> {
                vervallenFunctie
            }));

            // Als er geen exception gethrowd worden, zal de test failen.
        }
示例#8
0
        public Werknemer(int in_id, Functie in_functie, string in_naam, string in_wachtwoord)
        {
            Id         = in_id;
            Functie    = in_functie;
            Naam       = in_naam;
            Wachtwoord = in_wachtwoord;


            // exceptions van de contructor Werknemer

            string errorMessage = "";

            if (Setid(in_id) == false)
            {
                errorMessage = errorMessage + "verkeerde id: " + in_id;
            }

            if (Setfunctie(in_functie) == false)
            {
                errorMessage = errorMessage + "verkeerde functie: " + in_functie;
            }

            if (Setnaam(in_naam) == false)
            {
                errorMessage = errorMessage + "  " + in_naam;
            }

            if (errorMessage != "")
            {
                throw new Exception("Werknemer construction failed "
                                    + errorMessage);
            }
        }
示例#9
0
 public Medewerker(int id, string voornaam, string achternaam, Functie functie)
 {
     this.id         = id;
     this.voornaam   = voornaam;
     this.achternaam = achternaam;
     this.functie    = functie;
 }
        public void FunctieDitJaarInGebruikVerwijderenTest()
        {
            // arrange

            // testsituatie creeren
            var functie        = new Functie();
            var groepswerkjaar = new GroepsWerkJaar
            {
                ID    = 11,
                Groep =
                    new ChiroGroep
                {
                    ID             = 1,
                    GroepsWerkJaar = new List <GroepsWerkJaar>()
                }
            };

            groepswerkjaar.Groep.GroepsWerkJaar.Add(groepswerkjaar);
            functie.Groep = groepswerkjaar.Groep;
            var lid = new Leiding {
                Functie = new List <Functie>()
                {
                    functie
                }, GroepsWerkJaar = groepswerkjaar
            };

            functie.Lid.Add(lid);

            var mgr = Factory.Maak <FunctiesManager>();

            // assert

            Assert.Throws <BlokkerendeObjectenException <Lid> >(() => mgr.Verwijderen(functie, false));
        }
示例#11
0
 /// <summary>
 /// Controleert of de aangelogde gebruiker GAV is voor de gegeven <paramref name="functie"/>,
 /// en throwt de GeenGav-FaultException indien niet.
 /// </summary>
 /// <param name="functie">te controleren functie</param>
 public void Check(Functie functie)
 {
     if (functie == null || !(functie.IsNationaal || _autorisatieMgr.IsGav(functie.Groep)))
     {
         throw FaultExceptionHelper.GeenGav();
     }
 }
        public void OntbrekendeNationaalBepaaldeFuncties()
        {
            // ARRANGE

            // een nationale functie waarvan er precies 1 moet zijn
            var f = new Functie
            {
                MinAantal   = 1,
                Type        = LidType.Alles,
                ID          = 1,
                IsNationaal = true,
                Niveau      = Niveau.Alles
            };

            // groepswerkjaar zonder leden
            var gwj = new GroepsWerkJaar
            {
                Lid = new List <Lid>()
            };

            // Maak een functiesmanager
            var fm = Factory.Maak <FunctiesManager>();


            // ACT
            var problemen = fm.AantallenControleren(gwj, new[] { f });

            // ASSERT
            Assert.IsTrue(problemen.Any(prb => prb.ID == f.ID));
        }
示例#13
0
 public Personeel(int uid, string naam, string wachtwoord, DateTime geboortedatum, Functie functie)
 {
     this.UID = uid;
     this.Naam = naam;
     this.Wachtwoord = wachtwoord;
     this.Geboortedatum = geboortedatum;
     this.Functie = functie;
 }
示例#14
0
 public Medewerker(int id, string name, string surname, Functie function, string password)
 {
     this.ID         = id;
     this.voornaam   = name;
     this.achternaam = surname;
     this.functie    = function;
     this.wachtwoord = password;
 }
        public void FunctieLangerInGebruikGeforceerdVerwijderenTest()
        {
            // ARRANGE

            // model
            var groep = new ChiroGroep();

            var vorigWerkJaar = new GroepsWerkJaar {
                WerkJaar = 2011, Groep = groep, ID = 2
            };
            var ditWerkJaar = new GroepsWerkJaar {
                WerkJaar = 2012, Groep = groep, ID = 3
            };

            groep.GroepsWerkJaar.Add(vorigWerkJaar);
            groep.GroepsWerkJaar.Add(ditWerkJaar);

            var functie = new Functie {
                Groep = groep, ID = 1
            };

            groep.Functie.Add(functie);

            var gelieerdePersoon = new GelieerdePersoon {
                Groep = groep
            };

            groep.GelieerdePersoon.Add(gelieerdePersoon);

            var leidingToen = new Leiding {
                GelieerdePersoon = gelieerdePersoon, GroepsWerkJaar = vorigWerkJaar
            };
            var leidingNu = new Leiding {
                GelieerdePersoon = gelieerdePersoon, GroepsWerkJaar = ditWerkJaar
            };

            vorigWerkJaar.Lid.Add(leidingToen);
            ditWerkJaar.Lid.Add(leidingNu);

            leidingToen.Functie.Add(functie);
            leidingNu.Functie.Add(functie);
            functie.Lid.Add(leidingToen);
            functie.Lid.Add(leidingNu);

            // ACT

            var mgr    = Factory.Maak <FunctiesManager>();
            var result = mgr.Verwijderen(functie, true);

            // ASSERT

            // functie niet meer geldig
            Assert.IsTrue(groep.Functie.Contains(functie));
            Assert.AreEqual(result.WerkJaarTot, ditWerkJaar.WerkJaar - 1);

            // enkel het lid van dit werkJaar blijft over
            Assert.AreEqual(result.Lid.Count, 1);
        }
        internal static void Delete(Functie functie)
        {
            string sql;
            sql = "UPDATE contact SET FunctieID = 2010 WHERE FunctieID = @ID";
            Database.ModifyData(sql, Database.AddParameter("@ID", functie.ID));

            sql = "DELETE FROM functie WHERE FunctieID = @ID";
            Database.ModifyData(sql, Database.AddParameter("@ID", functie.ID));
        }
示例#17
0
 public Werknemer(int werkgeverpid, string naam, double?uurloon, DateTime werkdag, Functie functie = Functie.I)
 {
     WerkgeverPid = werkgeverpid;
     Naam         = naam;
     Uurloon      = uurloon;
     Werkdag      = werkdag;
     Functie      = functie;
     Werknemers   = new List <Werknemer>();
 }
示例#18
0
 public bool Setfunctie(Functie in_functie)
 {
     if ((in_functie == Functie.Bediening || in_functie == Functie.Bar || in_functie == Functie.Eigenaar || in_functie == Functie.Kok || in_functie == Functie.Sommelier))
     {
         this.Functie = in_functie;
         return(true);
     }
     return(false);
 }
示例#19
0
 public static Functie Insert(Functie entity)
 {
     using (var context = new CatalogProjectEntities())
     {
         entity = context.Functies.Add(entity);
         context.SaveChanges();
     }
     return(entity);
 }
示例#20
0
        public Taak AddTaak(int taakId, int pid, double uur, Functie functie)
        {
            var taak = new Taak(taakId, pid, uur, functie);

            if (Validate(taak))
            {
                _repo.CreateTaak(taak);
            }
            return(taak);
        }
示例#21
0
        private Werknemer ReadWerknemer(SqlDataReader reader)
        {
            // haal gegevens van alle velden op
            int     id         = (int)reader["persoon_id"];
            Functie functie    = (Functie)Enum.Parse(typeof(Functie), (string)reader["functie"]);
            string  naam       = (string)reader["naam"];
            string  wachtwoord = ((int)reader["code"]).ToString();

            // return nieuw Werknemer-object
            return(new Werknemer(id, functie, naam, wachtwoord));
        }
示例#22
0
        public Werknemer AddWerknemer(int pid, int werkgeverpid, string naam, double?uurloon, DateTime werkdag,
                                      Functie functie = Functie.I)
        {
            var werknemer = new Werknemer(pid, werkgeverpid, naam, uurloon, werkdag, functie);

            if (Validate(werknemer))
            {
                _repo.CreateWerknemer(werknemer);
            }
            return(werknemer);
        }
示例#23
0
        public async Task <IActionResult> Create([Bind("Id,Nume,Descriere")] Functie functie)
        {
            if (ModelState.IsValid)
            {
                _context.Add(functie);
                await _context.SaveChangesAsync();

                return(RedirectToAction(nameof(Index)));
            }
            return(View(functie));
        }
示例#24
0
 public Gebruiker(int gebruikerId, int postCount, string gebruikersnaam, string wachtwoord, string badge, string badgetekst, int karma, string emailAdres, Functie functie)
 {
     GebruikerId    = gebruikerId;
     PostCount      = postCount;
     Gebruikersnaam = gebruikersnaam;
     Wachtwoord     = wachtwoord;
     Badge          = badge;
     Badgetekst     = badgetekst;
     Karma          = karma;
     Emailadres     = emailAdres;
     Functie        = functie;
 }
示例#25
0
 public Angajati(int _id, string _nume, string _prenume, string _adresa, string _numar_telefon,
                 string _cnp, Functie _functie, DateTime _dataAngajare)
 {
     IdAngajat    = _id;
     Nume         = _nume;
     Prenume      = _prenume;
     Adresa       = _adresa;
     NumarTelefon = _numar_telefon;
     Cnp          = _cnp;
     Functie      = _functie;
     DataAngajare = _dataAngajare;
 }
示例#26
0
        List <Functie> FaCeva(List <List <string> > listeGenerate, List <List <string> > listeMarcate)
        {
            List <Functie>        functii        = new List <Functie>();
            int                   ceva           = 0;
            List <List <string> > listeDeAdaugat = new List <List <string> >();

            foreach (List <string> In in listeGenerate)
            {
                List <string> elemente = ElementeDupaPunct(In);
                foreach (string element in elemente)
                {
                    List <string> salt = Salt(In, element);

                    if (!ContineLista(listeGenerate, salt))
                    {
                        listeDeAdaugat.Add(salt);

                        if (listeGenerate.IndexOf(In) != 0)
                        {
                            int index = 0;
                            index = CautaIndex(listeGenerate, listeDeAdaugat, index, salt);
                            int     nr   = listeGenerate.IndexOf(In);
                            Functie func = new Functie(nr++, element, index);
                            functii.Add(func);
                        }
                    }
                    else
                    {
                        if (listeGenerate.IndexOf(In) != 0)
                        {
                            int index = 0;
                            index = CautaIndex(listeGenerate, listeDeAdaugat, index, salt);
                            int     nr   = listeGenerate.IndexOf(In);
                            Functie func = new Functie(nr++, element, index);
                            functii.Add(func);
                        }
                        if (!ContineLista(listeMarcate, salt))
                        {
                            listeMarcate.Add(salt);
                        }
                    }
                }
            }

            foreach (List <string> lista in listeDeAdaugat)
            {
                listeGenerate.Add(lista);
            }
            return(functii);
        }
示例#27
0
        public void Loonstroken(string Folder, string devider)
        {
            double startloon                  = Math.Round(StartloonNaUren(), 2);
            double ancienniteit               = Math.Round(AncienniteitVerschil(), 2);
            double LoonPlusAncienniteit       = Math.Round(Ancienniteit(), 2);
            double loonMinSocialezekerheid    = Math.Round(SocialeZekerheid(), 2);
            double bedragBedrijfsvoorheffing  = Math.Round(BedrijfsvoorheffingVerschil(), 2);
            double loonMinBedrijfsvoorheffing = Math.Round(Bedrijfsvoorheffing(), 2);
            double nettoLoon                  = Math.Round(Extras(), 2);
            string bestandnaamLoonstrook      = $"LOONBRIEF  {Naam} {Rijksregisternummer} {DateTime.Now.ToString("MM-yyyy")}.txt";

            using (StreamWriter writer = new StreamWriter(Folder + bestandnaamLoonstrook))
            {
                writer.WriteLine(devider);
                writer.WriteLine($"LOONBRIEF {DateTime.Now.ToString("MMMM yyyy").ToUpper()}");
                writer.WriteLine(devider);
                writer.WriteLine($"NAAM                     : {Naam}");
                writer.WriteLine($"RIJKSREGISTERNUMMER      : {Rijksregisternummer}");
                writer.WriteLine($"IBAN-NUMMER              : {Bankrekening}");
                writer.WriteLine($"GESLACHT                 : {(Geslacht ? "MAN" : "VROUW")}");
                writer.WriteLine($"GEBOORTEDATUM            : {GeboorteDatum.ToShortDateString()}");
                writer.WriteLine($"DATUM INDIENSTTREDING    : {DatumIntreding.ToShortDateString()}");
                writer.WriteLine($"FUNCTIE                  : {Functie.ToUpper()}");
                writer.WriteLine($"AANTAL GEPRESTEERDE UREN : {Uren}/38");
                if (BedrijfswagenString() != "")
                {
                    writer.WriteLine($"BEDRIJFSWAGEN            : {(Bedrijfswagen ? "Ja" : "Nee")}");
                }
                writer.WriteLine(devider);
                writer.WriteLine($"STARTLOON                :   €{CijferPrinterRechts(startloon)}");
                writer.WriteLine($"ANCIËNNITEIT             : + €{CijferPrinterRechts(ancienniteit)}");
                writer.WriteLine($"                             €{CijferPrinterRechts(LoonPlusAncienniteit)}");
                writer.WriteLine($"SOCIALE ZEKERHEID        : - €{CijferPrinterRechts(BijdragenSocialeZekerheid)}");
                writer.WriteLine($"                             €{CijferPrinterRechts(loonMinSocialezekerheid)}");
                writer.WriteLine($"BEDRIJFSVOORHEFFING      : - €{CijferPrinterRechts(bedragBedrijfsvoorheffing)}");
                writer.WriteLine($"                             €{CijferPrinterRechts(loonMinBedrijfsvoorheffing)}");
                if (Support() != "")
                {
                    writer.WriteLine($"BONUS THUIS WERKEN       : + €{CijferPrinterRechts(50.00)}");
                    if (CostumerSupport() != "")
                    {
                        writer.WriteLine($"TERUGBETAALING OPLEIDING : + €{CijferPrinterRechts(19.50)}");
                    }
                }

                writer.WriteLine($"NETTOLOON                :   €{CijferPrinterRechts(nettoLoon)}");
                writer.WriteLine(devider);
            }
        }
        public void TweeKeerUniekeFunctieToekennenTestVerschillendLid()
        {
            // ARRANGE

            var groepsWerkJaar = new GroepsWerkJaar
            {
                Groep    = new ChiroGroep(),
                WerkJaar = 2012
            };

            groepsWerkJaar.Groep.GroepsWerkJaar.Add(groepsWerkJaar);

            var uniekeFunctie = new Functie
            {
                MaxAantal = 1,
                Groep     = groepsWerkJaar.Groep,
                Niveau    = Niveau.Groep
            };

            var lid1 = new Leiding {
                GroepsWerkJaar = groepsWerkJaar, Functie = new List <Functie> {
                    uniekeFunctie
                }
            };
            var lid2 = new Leiding {
                GroepsWerkJaar = groepsWerkJaar
            };

            uniekeFunctie.Lid.Add(lid1);

            groepsWerkJaar.Lid.Add(lid1);
            groepsWerkJaar.Lid.Add(lid2);

            // ACT

            var functiesManager = Factory.Maak <FunctiesManager>();

            functiesManager.Toekennen(lid2, new List <Functie> {
                uniekeFunctie
            });

            // ASSERT

            var issues = functiesManager.AantallenControleren(groepsWerkJaar, new List <Functie> {
                uniekeFunctie
            });

            Assert.IsTrue(issues.Select(src => src.ID).Contains(uniekeFunctie.ID));
        }
示例#29
0
        public static void Update(Functie functie)
        {
            using (var context = new CatalogProjectEntities())
            {
                var dbEntity = context.Functies.FirstOrDefault(x => x.ID == functie.ID);
                if (dbEntity == null)
                {
                    dbEntity = new Functie();
                    context.Functies.Add(dbEntity);
                }
                dbEntity.Descriere = functie.Descriere;

                context.SaveChanges();
            }
        }
        // Kayleigh
        private BestelItem ReadBestelItem(SqlDataReader reader)
        {
            try
            {
                int    BestelItemID = reader.GetInt32(0);
                int    bestelId     = reader.GetInt32(1);
                int    menuItemID   = reader.GetInt32(2);
                int    aantal       = reader.GetInt32(3);
                Status status       = (Status)Enum.Parse(typeof(Status), reader.GetString(4));
                string opmerking    = reader.GetString(5);

                double   BestelItemPrijs  = reader.GetDouble(6);
                DateTime bestelItemTijd   = reader.GetDateTime(7);
                string   MenuItemNaam     = reader.GetString(9);
                double   MenuItemPrijs    = reader.GetDouble(10);
                int      MenuItemVoorraad = reader.GetInt32(11);

                int     MenuCatId     = reader.GetInt32(12);
                int     tafelId       = reader.GetInt32(14);
                int     medId         = reader.GetInt32(15);
                bool    betaald       = reader.GetBoolean(16);
                string  menuCatNaam   = reader.GetString(18);
                int     btw           = reader.GetInt32(19);
                int     MenuKaartId   = reader.GetInt32(20);
                string  menukaartNaam = reader.GetString(22);
                bool    tafelstatus   = reader.GetBoolean(24);
                string  voornaam      = reader.GetString(26);
                string  achternaam    = reader.GetString(27);
                Functie functie       = (Functie)Enum.Parse(typeof(Functie), reader.GetString(28));
                string  wachtwoord    = reader.GetString(29);


                MenuKaart     kaart      = new MenuKaart(MenuKaartId, menukaartNaam);
                Menucategorie cat        = new Menucategorie(MenuCatId, menuCatNaam, btw, kaart);
                MenuItem      menuitem   = new MenuItem(menuItemID, MenuItemNaam, MenuItemPrijs, MenuItemVoorraad, cat);
                Tafel         tafel      = new Tafel(tafelId, tafelstatus);
                Medewerker    med        = new Medewerker(medId, voornaam, achternaam, functie, wachtwoord);
                Bestelling    best       = new Bestelling(bestelId, betaald, tafel, med);
                BestelItem    bestelItem = new BestelItem(BestelItemID, best, menuitem, BestelItemPrijs, aantal, status, opmerking, bestelItemTijd);
                return(bestelItem);
            }
            catch
            {
                return(null);
            }
        }
示例#31
0
        //Door: Juan
        //Haalt de gevegevens van een werknemer op.
        public Medewerker GetWerknemerById(int werknemerId)

        {
            string queryString = "SELECT * FROM Werknemer WHERE Werknemer_id = @werknemer_id";

            dbConnection.Open();

            SqlCommand command = new SqlCommand(queryString, dbConnection);

            SqlParameter werknemer_idParam = new SqlParameter("@werknemer_id", System.Data.SqlDbType.Int);

            werknemer_idParam.Value = werknemerId;

            command.Parameters.Add(werknemer_idParam);
            command.Prepare();

            SqlDataReader reader = command.ExecuteReader();

            Medewerker medewerker = null;

            if (reader.Read())
            {
                string  voornaam   = (string)reader["Voornaam"];
                string  achternaam = (string)reader["Achternaam"];
                Functie functie    = (Functie)Enum.Parse(typeof(Functie), (string)reader["Functie"]);


                medewerker = new Medewerker(werknemerId, voornaam, achternaam, functie);

                if (medewerker.Functie == Functie.eigenaar)
                {
                    string wachtwoord = (string)reader["wachtwoord"];
                    medewerker.Wachtwoord = wachtwoord;
                }
                else
                {
                    medewerker.Wachtwoord = null;
                }
            }

            reader.Close();
            dbConnection.Close();

            return(medewerker);
        }
        internal static Functie GetFunctieFromID(int ID)
        {
            Functie f = new Functie();
            string sql = "SELECT * FROM functie WHERE FunctieID = @filter";

            DbParameter par = Database.AddParameter("filter", ID);
            DbDataReader reader = Database.GetData(sql, par);

            if(reader.Read())
            {
                f = MaakFunctie(reader);
                reader.Close();
                return f;
            }

               reader.Close();
               return null;
        }
        /// <summary>
        /// Verwijdert een functie
        /// </summary>
        /// <param name="functie">
        /// Te verwijderen functie
        /// </param>
        /// <param name="forceren">
        /// Indien <c>true</c> wordt de functie ook verwijderd als er
        ///  dit werkJaar personen met de gegeven functie zijn.  Anders krijg je een exception.
        /// </param>
        /// <returns>
        /// <c>Null</c> als de functie effectief verwijderd is, anders het functie-object met
        /// aangepast 'werkjaartot'.
        /// </returns>
        /// <remarks>
        /// Als de functie geen leden meer bevat na verwijdering van die van het huidige werkJaar,
        /// dan wordt ze verwijderd.  Zo niet, wordt er een stopdatum op geplakt.
        /// </remarks>
        public Functie Verwijderen(Functie functie, bool forceren)
        {
            // Leden moeten gekoppeld zijn
            // (null verschilt hier expliciet van een lege lijst)
            Debug.Assert(functie.Lid != null);

            if (functie.Groep == null)
            {
                throw new FoutNummerException(FoutNummer.FunctieNietBeschikbaar, Resources.NationaleFunctieVerwijderen);
            }

            var huidigGwj = functie.Groep.GroepsWerkJaar.OrderByDescending(gwj => gwj.WerkJaar).First();

            var metFunctieDitJaar = (from ld in functie.Lid
                                     where ld.GroepsWerkJaar.ID == huidigGwj.ID
                                     select ld).ToList();

            if (!forceren && metFunctieDitJaar.FirstOrDefault() != null)
            {
                throw new BlokkerendeObjectenException <Lid>(
                          metFunctieDitJaar,
                          metFunctieDitJaar.Count(),
                          Resources.FunctieNietLeeg);
            }

            foreach (var ld in metFunctieDitJaar)
            {
                functie.Lid.Remove(ld);
            }

            var metFunctieVroeger = from ld in functie.Lid
                                    where ld.GroepsWerkJaar.ID != huidigGwj.ID
                                    select ld;

            if (metFunctieVroeger.FirstOrDefault() == null)
            {
                functie.Groep.Functie.Remove(functie);
                return(null);
            }
            functie.WerkJaarTot = _veelGebruikt.WerkJaarOphalen(functie.Groep) - 1;
            return(functie);
        }
        internal static int SaveFunctie(Functie functie)
        {
            int id = functie.ID;
            if (functie.ID != 0)
            {
                string sql = "Update functie SET Naam = @Naam WHERE FunctieID = @ID";
                Database.ModifyData(sql, Database.AddParameter("@Naam", functie.Naam), Database.AddParameter("@ID", functie.ID));
            }
            else
            {
                string sql = "INSERT INTO functie (Naam) VALUES (@Naam); SELECT SCOPE_IDENTITY() AS [InsertedReserveringID]";
                DbDataReader reader = Database.GetData(sql, Database.AddParameter("@Naam", functie.Naam));

                if (reader.Read())
                    id = Convert.ToInt32(reader[0]);

                reader.Close();
            }

            return id;
        }
        private static Functie MaakFunctie(DbDataReader rij)
        {
            Functie f = new Functie();
            f.ID = Convert.ToInt32(rij["FunctieID"]);
            f.Naam = rij["Naam"].ToString();

            return f;
        }