コード例 #1
0
        /// <summary>
        /// Zoekt alle leden op zonder AD-nummer, en synchroniseert deze opnieuw, in de hoop dat
        /// ze nu wel een AD-nummer krijgen.
        /// </summary>
        public void LedenZonderAdOpnieuwSyncen()
        {
			var teSyncenLidIDs = from l in _actieveLedenRepo.Select ()
			                     where l.AdNummer == null
			                     select l.LidID;
			Console.WriteLine("Aanvragen van {0} AD-nummers", teSyncenLidIDs.Count());

			var teSyncen = (from l in _ledenRepo.Select("GelieerdePersoon.Persoon", "GroepsWerkJaar")
				where teSyncenLidIDs.Contains(l.ID)
			    select l).ToArray();

			_ledenSync.Bewaren (teSyncen);

            return;
        }
コード例 #2
0
        public List <InschrijvingsVoorstel> Inschrijven(IList <InschrijvingsVerzoek> inschrijfInfo)
        {
            // TODO: Te veel nesting. Opkuis nodig.

            var probleemGevallen = new List <InschrijvingsVoorstel>();
            var teSyncen         = new List <Lid>();

            var gelieerdePersonen = _gelieerdePersonenRepo.ByIDs(inschrijfInfo.Select(e => e.GelieerdePersoonID));

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

            // Mogelijk horen de gelieerde personen tot verschillende groepen.  Dat kan, als de GAV GAV is van
            // al die groepen. Als hij geen GAV is van de IDs, dan werd er al een exception gethrowd natuurlijk.
            var groepen = (from gp in gelieerdePersonen select gp.Groep).Distinct();

            foreach (var g in groepen)
            {
                bool groepInactief = g.StopDatum != null && g.StopDatum < DateTime.Now;

                // Per groep lid maken.
                // Zoek eerst recentste groepswerkjaar.
                var gwj = _groepenMgr.HuidigWerkJaar(g);

                foreach (var gp in gelieerdePersonen.Where(gelp => gelp.Groep.ID == g.ID).ToList())
                {
                    FoutNummer?foutNummer = groepInactief ? (FoutNummer?)FoutNummer.GroepInactief : null;

                    var info = (from i in inschrijfInfo where i.GelieerdePersoonID == gp.ID select i).First();

                    if (foutNummer == null)
                    {
                        var lidVoorstel = new LidVoorstel
                        {
                            AfdelingsJaren   = _afdelingsJaarRepo.ByIDs(info.AfdelingsJaarIDs),
                            LeidingMaken     = info.LeidingMaken,
                            GelieerdePersoon = gp,
                            GroepsWerkJaar   = gwj
                        };

                        // TODO: Dit is te veel business. Bekijken of een lid al ingeschreven is, moet in de workers gebeuren.

                        // Behandel leden 1 voor 1 zodat een probleem met 1 lid niet verhindert dat de rest bewaard wordt.

                        // Kijk of het lid al bestaat (eventueel niet-actief).  In de meeste gevallen zal dit geen
                        // resultaat opleveren.  Als er toch al een lid is, worden persoon, voorkeursadres, officiele afdeling,
                        // functies ook opgehaald, omdat een eventueel geheractiveerd lid opnieuw naar Kipadmin zal moeten.

                        var l = gp.Lid.FirstOrDefault(ld => ld.GroepsWerkJaar.ID == gwj.ID);

                        if (l != null) // al ingeschreven
                        {
                            if (l.UitschrijfDatum == null)
                            {
                                // Al ingeschreven als actief lid; we doen er verder niets mee.
                                // (Behalve een foutcode meegeven)

                                foutNummer = FoutNummer.LidWasAlIngeschreven;
                            }
                            else
                            {
                                l.UitschrijfDatum = null;
                                l.NonActief       = false;

                                if (lidVoorstel.LeidingMaken != (l.Type == LidType.Leiding))
                                {
                                    // lidtype moet worden veranderd

                                    Lid nieuwLid = null;
                                    try
                                    {
                                        nieuwLid = _ledenMgr.TypeToggle(l);
                                    }
                                    catch (FoutNummerException ex)
                                    {
                                        foutNummer = ex.FoutNummer;
                                    }

                                    if (foutNummer == null)
                                    {
                                        // verwijder bestaande lid
                                        _ledenRepo.Delete(l);

                                        // bewaar nieuw lid (ander type) in l; wordt straks
                                        // toegevoegd aan 'te syncen', waardoor het zal worden
                                        // bewaard en gesynct.

                                        l = nieuwLid;
                                    }
                                }
                                try
                                {
                                    _ledenMgr.AfdelingsJarenVervangen(l, lidVoorstel.AfdelingsJaren);
                                }
                                catch (FoutNummerException ex)
                                {
                                    foutNummer = ex.FoutNummer;
                                }

                                if (foutNummer == null)
                                {
                                    teSyncen.Add(l);
                                }
                            }
                        }
                        else // nieuw lid
                        {
                            try
                            {
                                l = _ledenMgr.NieuwInschrijven(lidVoorstel, false);

                                l.GelieerdePersoon.Persoon.InSync = true;
                                teSyncen.Add(l);
                            }
                            catch (BestaatAlException <Kind> )
                            {
                                foutNummer = FoutNummer.LidWasAlIngeschreven;
                            }
                            catch (BestaatAlException <Leiding> )
                            {
                                foutNummer = FoutNummer.LidWasAlIngeschreven;
                            }
                            catch (FoutNummerException ex)
                            {
                                foutNummer = ex.FoutNummer;
                            }
                            catch (GapException)
                            {
                                foutNummer = FoutNummer.AlgemeneLidFout;
                            }
                        }
                    }
                    if (foutNummer != null)
                    {
                        probleemGevallen.Add(new InschrijvingsVoorstel
                        {
                            GelieerdePersoonID      = gp.ID,
                            FoutNummer              = foutNummer,
                            VolledigeNaam           = gp.Persoon.VolledigeNaam,
                            AfdelingsJaarIDs        = info.AfdelingsJaarIDs,
                            AfdelingsJaarIrrelevant = info.AfdelingsJaarIrrelevant,
                            LeidingMaken            = info.LeidingMaken
                        });
                    }
                }
            }

#if KIPDORP
            using (var tx = new TransactionScope())
            {
#endif
            _ledenSync.Bewaren(teSyncen);
            _gelieerdePersonenRepo.SaveChanges();
#if KIPDORP
            tx.Complete();
        }
#endif


            return(probleemGevallen);
        }