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 AfdelingsJarenVoorstellenMvxGemengdTest()
        {
            // -- Arrange --

            // Testsituatie opzetten

            var ribbels = new OfficieleAfdeling
            {
                ID          = (int)NationaleAfdeling.Ribbels,
                LeefTijdVan = 6,
                LeefTijdTot = 7
            };

            // Een Chirogroep met een oud groepswerkjaar.
            var groep    = new ChiroGroep();
            var sloebers = new Afdeling {
                ID = 1, ChiroGroep = groep
            };
            var oudGroepsWerkJaar = new GroepsWerkJaar {
                Groep = groep
            };

            groep.GroepsWerkJaar.Add(oudGroepsWerkJaar);
            oudGroepsWerkJaar.AfdelingsJaar.Add(new AfdelingsJaar
            {
                Afdeling          = sloebers,
                GroepsWerkJaar    = oudGroepsWerkJaar,
                OfficieleAfdeling = ribbels,
                // Geslacht uit de oude doos:
                Geslacht = (GeslachtsType.Man | GeslachtsType.Vrouw)
            });

            // Dit jaar willen we een groep met 1 afdeling.
            var afdelingen = new List <Afdeling> {
                sloebers
            };

            const int NIEUW_WERKJAAR = 2012; // Jaartal is eigenlijk irrelevant voor deze test.

            // -- Act --
            var target = Factory.Maak <GroepsWerkJarenManager>();

            var actual        = target.AfdelingsJarenVoorstellen(groep, afdelingen, NIEUW_WERKJAAR, ribbels);
            var afdelingsJaar = actual.FirstOrDefault();

            // -- Assert --

            Assert.IsNotNull(afdelingsJaar);
            Assert.AreEqual(afdelingsJaar.Geslacht, GeslachtsType.Gemengd);
        }
        public void AfdelingsJarenVoorstellenOfficieleAfdelingTest()
        {
            // -- Arrange --

            // Testsituatie opzetten

            var ribbels = new OfficieleAfdeling
            {
                ID          = (int)NationaleAfdeling.Ribbels,
                LeefTijdVan = 6,
                LeefTijdTot = 7
            };

            // Een Chirogroep met een oud groepswerkjaar. Zonder afdelingen, why not.
            var groep = new ChiroGroep
            {
                GroepsWerkJaar = new List <GroepsWerkJaar> {
                    new GroepsWerkJaar()
                }
            };

            // Dit jaar willen we een groep met 1 afdeling.
            var afdelingen = new List <Afdeling> {
                new Afdeling {
                    ID = 1, ChiroGroep = groep
                }
            };

            const int NIEUW_WERKJAAR = 2012; // Jaartal is eigenlijk irrelevant voor deze test.

            // -- Act --
            var target = Factory.Maak <GroepsWerkJarenManager>();

            var actual        = target.AfdelingsJarenVoorstellen(groep, afdelingen, NIEUW_WERKJAAR, ribbels);
            var afdelingsJaar = actual.FirstOrDefault();

            // -- Assert --

            Assert.IsNotNull(afdelingsJaar);
            Assert.IsNotNull(afdelingsJaar.OfficieleAfdeling);
        }
Example #4
0
        public void AfdelingGroepsWerkJaarMismatch()
        {
            var groep1 = new ChiroGroep {
                ID = 1
            };
            var groep2 = new ChiroGroep {
                ID = 2
            };

            var gwj = new GroepsWerkJaar {
                ID = 1, Groep = groep1
            };
            var a = new Afdeling {
                ChiroGroep = groep2
            };
            var oa = new OfficieleAfdeling();

            var target = Factory.Maak <IAfdelingsJaarManager>();

            var ex = Assert.Throws <FoutNummerException>(() => target.Aanmaken(a, oa, gwj, 2001, 2002, GeslachtsType.Gemengd));
        }
Example #5
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);
        }
Example #6
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);
        }