示例#1
0
 public void Check(AfdelingsJaar g)
 {
     if (g == null || !_autorisatieMgr.IsGav(g.GroepsWerkJaar))
     {
         throw FaultExceptionHelper.GeenGav();
     }
 }
示例#2
0
        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);
        }
示例#4
0
        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);
        }
示例#6
0
        /// <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);
        }
示例#7
0
        /// <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);
        }
示例#8
0
        /// <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);
        }