public AansluitingModule(IGapUpdater gapUpdater)
        {
            // gapUpdater, aangeleverd door de dependency injection container, is disposable,
            // en moet achteraf vrijgegeven worden. Dat doen we in Dispose() van deze module.

            _gapUpdater = gapUpdater;

            // You can test this with curl:
            // curl -X PUT -d AdNummer=3 -d RecentsteWerkJaar=2015 localhost:50673/aansluiting
            Put["/aansluiting"] = _ =>
            {
                // AdNummer is hier de key.

                AansluitingModel model = this.Bind();

                try
                {
                    _gapUpdater.Bijwerken(model);
                }
                catch (FoutNummerException ex)
                {
                    if (ex.FoutNummer == FoutNummer.PersoonNietGevonden)
                    {
                        return(HttpStatusCode.NotFound);
                    }
                    throw;
                }

                return(HttpStatusCode.OK);
            };
        }
        public void AansluitingBijwerkenOnbekendLid()
        {
            // In principe kun je discussiëren over het geval dat de groep en de persoon wel
            // bestaan, maar het lid van het membership niet. Maar deze situatie doet zich
            // normaal gezien niet voor.
            //
            // De aansluitingsinformatie is voor het GAP enkel relevant om te weten of het
            // een membership moet aanmaken voor een lid. Voor onbestaande leden is het dus
            // niet erg dat die informatie verloren gaat. Te meer omdat CiviSync vermijdt dat
            // iemand dubbel aangesloten wordt, als het toch ergens mis gaat.

            // ARRANGE

            var model = new AansluitingModel
            {
                AdNummer          = 1,
                StamNummer        = "BLA/0000",
                RecentsteWerkJaar = 2015
            };

            // Dummy ledenrepository maken, die zeker geen leden vindt.
            var repositoryProviderMock = new Mock <IRepositoryProvider>();

            repositoryProviderMock.Setup(src => src.RepositoryGet <Lid>())
            .Returns(new DummyRepo <Lid>(new List <Lid>()));
            Factory.InstantieRegistreren(repositoryProviderMock.Object);

            // ACT

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

            target.Bijwerken(model);

            // ASSERT

            // We zijn blij dat we hier raken zonder exceptions.
            Assert.IsTrue(true);
        }
Esempio n. 3
0
        /// <summary>
        /// Werkt het werkjaar van laatste aansluiting bij van de persoon met
        /// AD-nummer gegeven in het model.
        /// </summary>
        /// <param name="model">Gegevens over bij te werken werkjaar.</param>
        public void Bijwerken(AansluitingModel model)
        {
            var lid = (from l in _ledenRepo.Select()
                       where l.GelieerdePersoon.Persoon.AdNummer == model.AdNummer &&
                       l.GroepsWerkJaar.Groep.Code == model.StamNummer &&
                       l.GroepsWerkJaar.WerkJaar == model.RecentsteWerkJaar
                       select l).FirstOrDefault();

            if (lid == null)
            {
                Console.WriteLine(
                    "Lid niet gevonden. {1} AD{0} {2}. Aansluiting genegeerd. Zie #4526",
                    model.AdNummer,
                    model.StamNummer,
                    model.RecentsteWerkJaar);
                return;
            }

            if (lid.IsAangesloten)
            {
                Console.WriteLine(
                    "{1} (ID {2}) was al aangesloten bij {3} in {0}. ",
                    model.RecentsteWerkJaar,
                    lid.GelieerdePersoon.Persoon.VolledigeNaam,
                    lid.GelieerdePersoon.Persoon.ID,
                    model.StamNummer);
            }

            lid.IsAangesloten = true;
            _ledenRepo.SaveChanges();
            Console.WriteLine("Aansluiting in {0} geregistreerd voor {1} (ID {2}) bij {3}.",
                              model.RecentsteWerkJaar,
                              lid.GelieerdePersoon.Persoon.VolledigeNaam,
                              lid.GelieerdePersoon.Persoon.ID,
                              model.StamNummer);
        }