public void ValidatieLidVoorstelZonderTelefoonNummer()
        {
            // Arrange
            // Ik maak een persoon, en een werkjaar met 2 afdelingen.  Maar dat is hier
            // niet relevant. Wat wel van belang is, is dat de persoon te jong is om
            // lid te worden. We verwachten dat het maken van een lidvoorstel crasht.

            var gwj = new GroepsWerkJaar {
                WerkJaar = 2014, Groep = new ChiroGroep()
            };                                                                           // Werkjaar 2012-2013

            var gp = new GelieerdePersoon
            {
                Persoon =
                    new Persoon
                {
                    GeboorteDatum = new DateTime(2000, 06, 21),
                    Geslacht      = GeslachtsType.Vrouw,
                },
                Groep         = gwj.Groep,
                PersoonsAdres = new PersoonsAdres(),
                Communicatie  = new List <CommunicatieVorm>() // geen telefoonnummer
            };

            gwj.AfdelingsJaar.Add(new AfdelingsJaar
            {
                ID = 1,
                GeboorteJaarVan   = 1999,
                GeboorteJaarTot   = 2000,
                Geslacht          = GeslachtsType.Gemengd,
                OfficieleAfdeling = new OfficieleAfdeling()
            });

            gwj.AfdelingsJaar.Add(new AfdelingsJaar
            {
                ID = 2,
                GeboorteJaarVan   = 1997,
                GeboorteJaarTot   = 1998,
                Geslacht          = GeslachtsType.Gemengd,
                OfficieleAfdeling = new OfficieleAfdeling()
            });

            var lidVoorstel = new LidVoorstel
            {
                GelieerdePersoon         = gp,
                GroepsWerkJaar           = gwj,
                AfdelingsJarenIrrelevant = true,
                LeidingMaken             = false
            };

            var target = new LidVoorstelValidator();

            // Act

            var foutNummer = target.FoutNummer(lidVoorstel);

            // Assert

            Assert.AreEqual(FoutNummer.TelefoonNummerOntbreekt, foutNummer);
        }
        public void ValidatieLidVoorstelKleutersTest()
        {
            // Arrange
            // Ik maak een persoon, en een werkjaar met 2 afdelingen.  Maar dat is hier
            // niet relevant. Wat wel van belang is, is dat de persoon te jong is om
            // lid te worden.

            var gwj = new GroepsWerkJaar {
                WerkJaar = 2012, Groep = new ChiroGroep()
            };                                                                           // Werkjaar 2012-2013

            var gp = new GelieerdePersoon
            {
                Persoon =
                    new Persoon
                {
                    GeboorteDatum = new DateTime(2010, 06, 21),     // Geboren in 2010
                    Geslacht      = GeslachtsType.Vrouw,
                },
                Groep = gwj.Groep
            };

            gwj.AfdelingsJaar.Add(new AfdelingsJaar
            {
                ID = 1,
                GeboorteJaarVan   = 1999,
                GeboorteJaarTot   = 2000,
                Geslacht          = GeslachtsType.Gemengd,
                OfficieleAfdeling = new OfficieleAfdeling()
            });

            gwj.AfdelingsJaar.Add(new AfdelingsJaar
            {
                ID = 2,
                GeboorteJaarVan   = 1997,
                GeboorteJaarTot   = 1998,
                Geslacht          = GeslachtsType.Gemengd,
                OfficieleAfdeling = new OfficieleAfdeling()
            });

            var lidVoorstel = new LidVoorstel
            {
                GelieerdePersoon         = gp,
                GroepsWerkJaar           = gwj,
                AfdelingsJarenIrrelevant = true,
                LeidingMaken             = false
            };

            var target = new LidVoorstelValidator();

            // Act

            var foutNummer = target.FoutNummer(lidVoorstel);

            // Assert

            Assert.AreEqual(FoutNummer.LidTeJong, foutNummer);
        }
        public void ValidatieLidVoorstelLeidingZonderEmail()
        {
            // Arrange
            // Ik maak een persoon, en een werkjaar met 2 afdelingen.  Maar dat is hier
            // niet relevant. Wat wel van belang is, is dat de persoon te jong is om
            // lid te worden. We verwachten dat het maken van een lidvoorstel crasht.

            var gwj = new GroepsWerkJaar {
                WerkJaar = 2014, Groep = new ChiroGroep()
            };                                                                           // Werkjaar 2012-2013

            var gp = new GelieerdePersoon
            {
                Persoon =
                    new Persoon
                {
                    GeboorteDatum = new DateTime(1995, 06, 21),
                    Geslacht      = GeslachtsType.Vrouw,
                },
                Groep         = gwj.Groep,
                PersoonsAdres = new PersoonsAdres(),
                Communicatie  = new List <CommunicatieVorm>
                {
                    // Enkel telefoonnummer; e-mailadres ontbreekt.
                    new CommunicatieVorm
                    {
                        CommunicatieType = new CommunicatieType {
                            ID = (int)CommunicatieTypeEnum.TelefoonNummer
                        }
                    }
                }
            };

            var lidVoorstel = new LidVoorstel
            {
                GelieerdePersoon         = gp,
                GroepsWerkJaar           = gwj,
                AfdelingsJaren           = new List <AfdelingsJaar>(),
                AfdelingsJarenIrrelevant = false,
                LeidingMaken             = true
            };

            var target = new LidVoorstelValidator();

            // Act

            var foutNummer = target.FoutNummer(lidVoorstel);

            // Assert

            Assert.AreEqual(FoutNummer.EMailVerplicht, foutNummer);
        }
Пример #4
0
        /// <summary>
        /// Schrijft een gelieerde persoon in, persisteert niet.  Er mag nog geen lidobject (ook geen inactief) voor de
        /// gelieerde persoon bestaan.
        /// </summary>
        /// <param name="voorstelLid">
        ///     Voorstel voor de eigenschappen van het in te schrijven lid.
        /// </param>
        /// <param name="isJaarOvergang">
        ///     Geeft aan of het over de automatische jaarovergang gaat; relevant voor de
        ///     probeerperiode
        /// </param>
        /// <returns>
        /// Het aangemaakte lid object
        /// </returns>
        public Lid NieuwInschrijven(LidVoorstel voorstelLid, bool isJaarOvergang)
        {
            var validator = new LidVoorstelValidator();
            var gp        = voorstelLid.GelieerdePersoon;
            var gwj       = voorstelLid.GroepsWerkJaar;

            // We gaan ervan uit dat er een voorstel is. Je kunt het voorstel automatisch laten
            // genereren via InschrijvingVoorstellen.

            Debug.Assert(voorstelLid != null);

            var foutNummer = validator.FoutNummer(voorstelLid);

            if (foutNummer != null)
            {
                if (foutNummer.Value == FoutNummer.OnbekendGeslacht)
                {
                    // Al de rest zit in client side validation, maar dit is een complex geval. Geslacht is verplicht,
                    // maar als het niet ingevuld wordt, krijg je standaard 'Onbekend', waardoor het toch ingevuld is.
                    throw new FoutNummerException(foutNummer.Value, Resources.GeslachtVerplicht);
                }
                else
                {
                    throw new FoutNummerException(foutNummer.Value, Resources.LidProbleem);
                }
            }

            if (voorstelLid.AfdelingsJarenIrrelevant && !voorstelLid.LeidingMaken)
            {
                // Lid maken en zelf afdeling bepalen
                voorstelLid.AfdelingsJaren = InschrijvingVoorstellen(gp, gwj, false).AfdelingsJaren;

                if (!voorstelLid.AfdelingsJaren.Any())
                {
                    throw new FoutNummerException(FoutNummer.AfdelingNietBeschikbaar, Resources.GeenAfdelingVoorLeeftijd);
                }
            }

            Lid nieuwlid;

            if (voorstelLid.LeidingMaken)
            {
                nieuwlid = LeidingMaken(gp, gwj, isJaarOvergang, voorstelLid.AfdelingsJaren);
            }
            else
            {
                nieuwlid = KindMaken(gp, gwj, isJaarOvergang, voorstelLid.AfdelingsJaren.First());
            }

            return(nieuwlid);
        }
Пример #5
0
        public List <InschrijvingsVoorstel> InschrijvingVoorstellen(IList <int> gelieerdePersoonIds)
        {
            // TODO (#195): van onderstaande logica moet wel wat verhuizen naar de workers!
            var gelieerdePersonen = _gelieerdePersonenRepo.ByIDs(gelieerdePersoonIds);

            if (!_autorisatieMgr.IsGav(gelieerdePersonen) || gelieerdePersoonIds.Count != gelieerdePersonen.Count)
            {
                throw FaultExceptionHelper.GeenGav();
            }

            // We gaan ervan uit dat alle gelieerde personen op dit moment tot dezelfde groep behoren.
            // Maar in de toekomst is dat misschien niet meer zo. Dus laten we onderstaande constructie
            // maar staan.
            var groepen = (from gp in gelieerdePersonen select gp.Groep).Distinct().ToList();

            var resultaat = new List <InschrijvingsVoorstel>();

            foreach (var g in groepen)
            {
                var gwj = _groepenMgr.HuidigWerkJaar(g);

                foreach (var gp in gelieerdePersonen.Where(gelp => gelp.Groep.ID == g.ID).OrderByDescending(gp => gp.GebDatumMetChiroLeefTijd))
                {
                    var inschrijvingsVoorstel = new InschrijvingsVoorstel
                    {
                        GelieerdePersoonID = gp.ID,
                        VolledigeNaam      = gp.Persoon.VolledigeNaam
                    };

                    try
                    {
                        var voorstel  = _ledenMgr.InschrijvingVoorstellen(gp, gwj, true);
                        var validator = new LidVoorstelValidator();

                        inschrijvingsVoorstel.AfdelingsJaarIrrelevant = voorstel.AfdelingsJarenIrrelevant;
                        inschrijvingsVoorstel.AfdelingsJaarIDs        =
                            voorstel.AfdelingsJarenIrrelevant
                                ? new int[0]
                                : voorstel.AfdelingsJaren.Select(aj => aj.ID)
                            .ToArray();
                        inschrijvingsVoorstel.LeidingMaken  = voorstel.LeidingMaken;
                        inschrijvingsVoorstel.VolledigeNaam = gp.Persoon.VolledigeNaam;
                        inschrijvingsVoorstel.FoutNummer    = validator.FoutNummer(voorstel);
                    }
                    catch (FoutNummerException ex)
                    {
                        inschrijvingsVoorstel.FoutNummer = ex.FoutNummer;
                    }

                    if (inschrijvingsVoorstel.FoutNummer == null)
                    {
                        // Gelukte inschrijvingen achteraan toevoegen aan lijst.
                        resultaat.Add(inschrijvingsVoorstel);
                    }
                    else
                    {
                        // Foutberichten vooraan de feedback.
                        resultaat.Insert(0, inschrijvingsVoorstel);
                    }
                }
            }
            return(resultaat);
        }