public void Check(AfdelingsJaar g) { if (g == null || !_autorisatieMgr.IsGav(g.GroepsWerkJaar)) { throw FaultExceptionHelper.GeenGav(); } }
public void InschrijvingVoorstellenTest1() { // Arrange // Ik maak een persoon, en een werkjaar met 2 afdelingen, zodanig dat // de geboortedatum van die persoon buiten de afdelingen valt. We verwachten // de afdeling die het meest logisch is (kleinste verschil met geboortedatum) var gp = new GelieerdePersoon { Persoon = new Persoon { GeboorteDatum = new DateTime(1996, 03, 07), Geslacht = GeslachtsType.Vrouw, }, PersoonsAdres = new PersoonsAdres(), }; var gwj = new GroepsWerkJaar { WerkJaar = 2011, Groep = new ChiroGroep() }; gp.Groep = gwj.Groep; var afdelingsJaar1 = new AfdelingsJaar { ID = 1, GeboorteJaarVan = 1999, GeboorteJaarTot = 2000, Geslacht = GeslachtsType.Gemengd, OfficieleAfdeling = new OfficieleAfdeling(), GroepsWerkJaar = gwj }; var afdelingsJaar2 = new AfdelingsJaar { ID = 2, GeboorteJaarVan = 1997, GeboorteJaarTot = 1998, Geslacht = GeslachtsType.Gemengd, OfficieleAfdeling = new OfficieleAfdeling(), GroepsWerkJaar = gwj }; gwj.AfdelingsJaar.Add(afdelingsJaar1); gwj.AfdelingsJaar.Add(afdelingsJaar2); var target = Factory.Maak <LedenManager>(); // Act var actual = target.InschrijvingVoorstellen(gp, gwj, false); // Assert Assert.AreEqual(actual.AfdelingsJaren[0], afdelingsJaar2); }
public void JaarOvergangUitvoerenTest() { // ARRANGE // Vrij veel voorbereiding voor een vrij flauwe test. var ribbeloff = new OfficieleAfdeling { ID = 1, LeefTijdTot = 7, LeefTijdVan = 6, Naam = "Ribbel" }; var groep = new ChiroGroep { ID = 10, GroepsWerkJaar = new List <GroepsWerkJaar>() }; var gwj = new GroepsWerkJaar { WerkJaar = 2010, Groep = groep }; groep.GroepsWerkJaar.Add(gwj); var afdjaar1 = new AfdelingsJaar { ID = 1, GeboorteJaarVan = 2003, GeboorteJaarTot = 2004, OfficieleAfdeling = ribbeloff }; var afd1 = new Afdeling { ID = 2, AfdelingsJaar = new List <AfdelingsJaar> { afdjaar1 }, ChiroGroep = groep }; afdjaar1.Afdeling = afd1; groep.Afdeling.Add(afd1); gwj.AfdelingsJaar.Add(afdjaar1); var newafdjaar = new AfdelingDetail { AfdelingID = afd1.ID, AfdelingsJaarID = afdjaar1.ID, GeboorteJaarVan = DateTime.Today.Year - 10, GeboorteJaarTot = DateTime.Today.Year - 8, OfficieleAfdelingID = ribbeloff.ID, Geslacht = GeslachtsType.Gemengd }; var officieleAfdelingenRepo = new DummyRepo <OfficieleAfdeling>(new[] { ribbeloff }); // ACT var target = Factory.Maak <JaarOvergangManager>(); var teActiveren = new List <AfdelingsJaarDetail> { newafdjaar }; target.JaarOvergangUitvoeren(teActiveren, groep, officieleAfdelingenRepo); // ASSERT Assert.AreEqual(groep.GroepsWerkJaar.Count, 2); Assert.AreEqual(groep.GroepsWerkJaar.OrderByDescending(gwjr => gwjr.WerkJaar).First().AfdelingsJaar.Count, 1); }
public void InschrijvingVoorstellenTest() { // Arrange var gp = new GelieerdePersoon { Persoon = new Persoon { GeboorteDatum = new DateTime(1996, 03, 07), Geslacht = GeslachtsType.Vrouw, }, PersoonsAdres = new PersoonsAdres(), }; var gwj = new GroepsWerkJaar { WerkJaar = 2011, Groep = new ChiroGroep() }; gp.Groep = gwj.Groep; var afdelingsJaar1 = new AfdelingsJaar { ID = 1, GeboorteJaarVan = 1996, GeboorteJaarTot = 1997, Geslacht = GeslachtsType.Man, OfficieleAfdeling = new OfficieleAfdeling() }; var afdelingsJaar2 = new AfdelingsJaar { ID = 2, GeboorteJaarVan = 1996, GeboorteJaarTot = 1997, Geslacht = GeslachtsType.Vrouw, OfficieleAfdeling = new OfficieleAfdeling() }; gwj.AfdelingsJaar.Add(afdelingsJaar1); gwj.AfdelingsJaar.Add(afdelingsJaar2); var target = Factory.Maak <LedenManager>(); // Act var actual = target.InschrijvingVoorstellen(gp, gwj, false); // Assert Assert.AreEqual(actual.AfdelingsJaren[0], afdelingsJaar2); }
public void AfdelingsJarenVoorstellenTest() { // ARRANGE: dom modelleke opbouwen var groep = new ChiroGroep { Afdeling = new List <Afdeling>(), GroepsWerkJaar = new List <GroepsWerkJaar>() }; var groepsWerkJaar = new GroepsWerkJaar { WerkJaar = 2010, ID = 2971, Groep = groep, AfdelingsJaar = new List <AfdelingsJaar>() }; groep.GroepsWerkJaar.Add(groepsWerkJaar); var afdeling = new Afdeling { ID = 2337, ChiroGroep = groep }; groep.Afdeling.Add(afdeling); var afdelingsJaar = new AfdelingsJaar { GroepsWerkJaar = groepsWerkJaar, Afdeling = afdeling, GeboorteJaarVan = 2003, GeboorteJaarTot = 2004 }; groepsWerkJaar.AfdelingsJaar.Add(afdelingsJaar); // ACT: stel nieuwe afdelingsjaren voor var target = Factory.Maak <GroepsWerkJarenManager>(); var actual = target.AfdelingsJarenVoorstellen(groep, groep.Afdeling.ToList(), 2011, new OfficieleAfdeling()); // ASSERT Assert.IsNotNull(actual); Assert.IsNotNull(actual[0]); Assert.AreEqual(actual[0].GeboorteJaarVan, afdelingsJaar.GeboorteJaarVan + 1); Assert.AreEqual(actual[0].GeboorteJaarTot, afdelingsJaar.GeboorteJaarTot + 1); }
/// <summary> /// Maakt een afdelingsjaar voor een groep en een afdeling, persisteert niet. /// </summary> /// <param name="a"> /// Afdeling voor nieuw afdelingsjaar /// </param> /// <param name="oa"> /// Te koppelen officiële afdeling /// </param> /// <param name="gwj"> /// Groepswerkjaar (koppelt de afdeling aan een groep en een werkJaar) /// </param> /// <param name="geboorteJaarBegin"> /// Geboortejaar van /// </param> /// <param name="geboorteJaarEind"> /// Geboortejaar tot /// </param> /// <param name="geslacht"> /// Bepaalt of de afdeling een jongensafdeling, meisjesafdeling of /// gemengde afdeling is. /// </param> /// <returns> /// Het aangemaakte afdelingsjaar /// </returns> public AfdelingsJaar Aanmaken( Afdeling a, OfficieleAfdeling oa, GroepsWerkJaar gwj, int geboorteJaarBegin, int geboorteJaarEind, GeslachtsType geslacht) { var afdelingsJaar = new AfdelingsJaar { OfficieleAfdeling = oa, Afdeling = a, GroepsWerkJaar = gwj, GeboorteJaarVan = geboorteJaarBegin, GeboorteJaarTot = geboorteJaarEind, Geslacht = geslacht }; // TODO check if no conflicts with existing afdelingsjaar a.AfdelingsJaar.Add(afdelingsJaar); oa.AfdelingsJaar.Add(afdelingsJaar); gwj.AfdelingsJaar.Add(afdelingsJaar); FoutNummer?afdelingsJaarFout = new AfdelingsJaarValidator().FoutNummer(afdelingsJaar); if (afdelingsJaarFout == FoutNummer.OngeldigeGeboorteJarenVoorAfdeling) { throw new FoutNummerException(afdelingsJaarFout.Value, Resources.OngeldigeGeboorteJarenVoorAfdeling); } if (afdelingsJaarFout != null) { throw new FoutNummerException(afdelingsJaarFout.Value, Resources.AfdelingsJaarOngeldig); } return(afdelingsJaar); }
/// <summary> /// Stelt afdelingsjaren voor voor de gegeven <paramref name="groep"/> en <paramref name="afdelingen"/> /// in het werkjaar <paramref name="nieuwWerkJaar"/> - <paramref name="nieuwWerkJaar"/>+1. /// </summary> /// <param name="groep">Groep waarvoor afdelingsjaren moeten worden voorgesteld, met daaraan gekoppeld /// het huidige groepswerkjaar, de huidige afdelingsjaren, en alle beschikbare afdelingen.</param> /// <param name="afdelingen">Afdelingen waarvoor afdelingsjaren moeten worden voorgesteld</param> /// <param name="nieuwWerkJaar">Bepaalt het werkjaar waarvoor de afdelingsjaren voorgesteld moeten worden.</param> /// <param name="standaardOfficieleAfdeling">Officiele afdeling die standaard voorgesteld moet worden als de /// afdeling het laatste afdelingsjaar niet in gebruik was.</param> /// <returns>Lijstje afdelingsjaren</returns> public IList <AfdelingsJaar> AfdelingsJarenVoorstellen(ChiroGroep groep, IList <Afdeling> afdelingen, int nieuwWerkJaar, OfficieleAfdeling standaardOfficieleAfdeling) { // TODO: als een afdeling vorig jaar niet bestond, dan maken we een afdelingsjaar op basis van de meegegeven // standaardOfficieleAfdeling. Dat kan beter. We zouden in eerste instantie kunnen nakijken of de afdeling // in een vroeger afdelingsjaar gebruikt was. En in tweede instantie zouden we kunnen gokken op basis van // de naam. if (afdelingen.FirstOrDefault(afd => afd.ChiroGroep.ID != groep.ID) != null) { throw new FoutNummerException(FoutNummer.AfdelingNietVanGroep, Resources.AfdelingNietVanGroep); } var recentsteWerkjaar = groep.GroepsWerkJaar.OrderByDescending(gwj => gwj.WerkJaar).FirstOrDefault(); if (recentsteWerkjaar == null) { // Eigenlijk gaan we ervan uit dat elke groep al wel een afdelingsjaar heeft. Maar // moest het toch niet zo zijn, dan geven we gauw een domme suggestie terug return((from afd in afdelingen select new AfdelingsJaar { Afdeling = afd, OfficieleAfdeling = standaardOfficieleAfdeling, Geslacht = GeslachtsType.Gemengd }).ToList()); } var werkJarenVerschil = nieuwWerkJaar - recentsteWerkjaar.WerkJaar; // We halen de afdelingsjaren van het huidige (oude) werkjaar op, zodat we op basis daarvan geboortejaren // en geslacht voor de nieuwe afdelingsjaren in het nieuwe werkjaar kunnen voorstellen. var huidigeAfdelingsJaren = recentsteWerkjaar.AfdelingsJaar; // Creeer een voorstel voor de nieuwe afdelingsjaren var nieuweAfdelingsJaren = new List <AfdelingsJaar>(); foreach (var afdeling in afdelingen) { // geboortejaren en geslacht gewoon default values, passen we zo nodig // straks nog aan. var afdelingsJaar = new AfdelingsJaar { Afdeling = afdeling, GeboorteJaarVan = 0, GeboorteJaarTot = 0, Geslacht = GeslachtsType.Gemengd }; nieuweAfdelingsJaren.Add(afdelingsJaar); // Als de afdeling dit jaar al actief was, kunnen we de details automatisch bepalen var bestaandAfdelingsJaar = (from aj in huidigeAfdelingsJaren where aj.Afdeling.ID == afdeling.ID select aj).FirstOrDefault(); if (bestaandAfdelingsJaar != null) { afdelingsJaar.OfficieleAfdeling = bestaandAfdelingsJaar.OfficieleAfdeling; afdelingsJaar.Geslacht = bestaandAfdelingsJaar.Geslacht; afdelingsJaar.GeboorteJaarTot = bestaandAfdelingsJaar.GeboorteJaarTot + werkJarenVerschil; afdelingsJaar.GeboorteJaarVan = bestaandAfdelingsJaar.GeboorteJaarVan + werkJarenVerschil; // 'Gemengd' werd geherdefinieerd sinds het gap het derde geslacht ondersteunt (#3814). // De 'oude' interpretatie van gemengd moet nu vertaald worden naar M|V|X. (zie #3849). if (afdelingsJaar.Geslacht == (GeslachtsType.Man | GeslachtsType.Vrouw)) { afdelingsJaar.Geslacht = GeslachtsType.Gemengd; } } else { // Als officiële afdeling, geven we ribbels, om te vermijden dat de groepen te snel // 'speciaal' zouden kiezen. // TODO: Als een afdeling vorig jaar niet gebruikt werd, zou het niet slecht zijn moesten // we opgezocht hebben of ze in een erder verleden wel gebruikt is geweest. afdelingsJaar.OfficieleAfdeling = standaardOfficieleAfdeling; afdelingsJaar.Geslacht = GeslachtsType.Gemengd; afdelingsJaar.GeboorteJaarTot = nieuwWerkJaar - standaardOfficieleAfdeling.LeefTijdVan; afdelingsJaar.GeboorteJaarVan = nieuwWerkJaar - standaardOfficieleAfdeling.LeefTijdTot; } } // Sorteer de afdelingsjaren: eerst die zonder geboortejaren, dan van jong naar oud var resultaat = (from a in nieuweAfdelingsJaren orderby a.GeboorteJaarTot descending orderby a.GeboorteJaarTot == 0 descending select a).ToArray(); return(resultaat); }
/// <summary> /// Maakt gelieerde persoon een kind (lid) voor het gegeven werkJaar. /// <para> /// </para> /// Dit komt neer op /// Automatisch een afdeling voor het kind bepalen. Een exception als dit niet mogelijk is. /// De probeerperiode zetten op binnen 3 weken als het een nieuw lid is, en op 15 oktober als de persoon vorig jaar al lid was. /// </summary> /// <param name="gp"> /// Gelieerde persoon, gekoppeld aan groep en persoon /// </param> /// <param name="gwj"> /// Groepswerkjaar waarin lid te maken, gekoppeld met afdelingsjaren /// </param> /// <param name="isJaarOvergang"> /// Geeft aan of het lid gemaakt wordt voor de automatische jaarovergang; relevant /// voor probeerperiode. /// </param> /// <param name="voorgesteldeAfdeling"> /// Voorstel tot toe te kennen afdeling. Checks hierop moeten al gebeurd zijn /// </param> /// <returns> /// Nieuw kindobject, niet gepersisteerd /// </returns> /// <remarks> /// Private; andere lagen moeten via 'Inschrijven' gaan. /// <para> /// </para> /// De user zal nooit zelf mogen kiezen in welk groepswerkjaar een kind lid wordt. Maar /// om testdata voor unit tests op te bouwen, hebben we deze functionaliteit wel nodig. /// <para> /// </para> /// Voorlopig gaan we ervan uit dat aan een gelieerde persoon al zijn vorige lidobjecten met /// groepswerkjaren gekoppeld zijn. Dit wordt gebruikt in LidMaken /// om na te kijken of een gelieerde persoon al eerder /// lid was. Dit lijkt me echter niet nodig; zie de commentaar aldaar. /// </remarks> /// <throws>FoutNummerException</throws> /// <throws>GeenGavException</throws> /// <throws>InvalidOperationException</throws> private Kind KindMaken(GelieerdePersoon gp, GroepsWerkJaar gwj, bool isJaarOvergang, AfdelingsJaar voorgesteldeAfdeling) { // LidMaken doet de nodige checks ivm GAV-schap, enz. var k = LidMaken(gp, gwj, LidType.Kind, isJaarOvergang) as Kind; // Probeer nu afdeling te vinden. if (gwj.AfdelingsJaar.Count == 0) { throw new FoutNummerException(FoutNummer.AfdelingKindVerplicht, Resources.InschrijvenZonderAfdelingen); } // allemaal om resharper blij tehouden: Debug.Assert(k != null); Debug.Assert(gp.GebDatumMetChiroLeefTijd != null); // Afdeling bepalen AfdelingsJaar gekozenAfdeling; if (voorgesteldeAfdeling != null) { // Checks hierop zijn al gebeurd in de aanroepende methode gekozenAfdeling = voorgesteldeAfdeling; } else { var geboortejaar = gp.GebDatumMetChiroLeefTijd.Value.Year; // Relevante afdelingsjaren opzoeken. Afdelingen met speciale officiele afdeling // worden in eerste instantie uitgesloten van de automatische verdeling. var afdelingsjaren = (from a in gwj.AfdelingsJaar where a.GeboorteJaarVan <= geboortejaar && geboortejaar <= a.GeboorteJaarTot && a.OfficieleAfdeling.ID != (int)NationaleAfdeling.Speciaal select a).ToList(); if (afdelingsjaren.Count == 0) { // Is er geen geschikte 'normale' afdeling gevonden, probeer dan de speciale eens. afdelingsjaren = (from a in gwj.AfdelingsJaar where a.GeboorteJaarVan <= geboortejaar && geboortejaar <= a.GeboorteJaarTot && a.OfficieleAfdeling.ID == (int)NationaleAfdeling.Speciaal select a).ToList(); } if (afdelingsjaren.Count == 0) { throw new FoutNummerException(FoutNummer.AfdelingNietBeschikbaar, Resources.GeenAfdelingVoorLeeftijd); } // Kijk of er een afdeling is met een overeenkomend geslacht var aj = (from a in afdelingsjaren where a.Geslacht == gp.Persoon.Geslacht || a.Geslacht == GeslachtsType.Gemengd select a).FirstOrDefault(); // Als dit niet zo is, kies dan de eerste afdeling die voldoet aan de leeftijdsgrenzen. gekozenAfdeling = aj ?? afdelingsjaren.First(); } k.AfdelingsJaar = gekozenAfdeling; gekozenAfdeling.Kind.Add(k); return(k); }