/// <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; }
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); }