public void Check(AfdelingsJaar g) { if (g == null || !_autorisatieMgr.IsGav(g.GroepsWerkJaar)) { throw FaultExceptionHelper.GeenGav(); } }
/// <summary> /// Controleer of <paramref name="filter"/> geen zaken probeert op te vragen waarvoor /// je geen rechten hebt. /// </summary> /// <param name="filter">Een lidfilter</param> private void SecurityCheck(LidFilter filter) { // Check security // We verwachten minstens 1 van volgende zaken: // GroepID, GroepsWerkJaarID, AfdelingID, FunctieID // Als je recht hebt op groep, groepswerkjaar, afdeling of functie // dan krijg je resultaat. Securitygewijze is dat geen probleem, want // alle zoekvoorwaarden worden 'ge-and'. // Heb je geen rechten op groep, groepswerjaar, afdeling of functie, // dan krijg je een exception (te veel geknoei) Groep groep = null; if (filter.GroepID != null) { groep = _groepenRepo.ByID(filter.GroepID.Value); } else if (filter.GroepsWerkJaarID != null) { groep = _groepsWerkJarenRepo.ByID(filter.GroepsWerkJaarID.Value, "Groep").Groep; } else if (filter.AfdelingID != null) { groep = _afdelingenRepo.ByID(filter.AfdelingID.Value, "Groep").ChiroGroep; } else if (filter.FunctieID != null) { groep = _functiesRepo.ByID(filter.FunctieID.Value, "Groep").Groep; } if (!_autorisatieMgr.IsGav(groep)) { throw FaultExceptionHelper.GeenGav(); } }
public void CheckSuperGav() { if (!_autorisatieMgr.IsSuperGav()) { throw FaultExceptionHelper.GeenGav(); } }
/// <summary> /// Controleert of de aangelogde gebruiker GAV is voor de gegeven <paramref name="functie"/>, /// en throwt de GeenGav-FaultException indien niet. /// </summary> /// <param name="functie">te controleren functie</param> public void Check(Functie functie) { if (functie == null || !(functie.IsNationaal || _autorisatieMgr.IsGav(functie.Groep))) { throw FaultExceptionHelper.GeenGav(); } }
public void Check(Afdeling g) { if (g == null || !_autorisatieMgr.IsGav(g.ChiroGroep)) { throw FaultExceptionHelper.GeenGav(); } }
public IEnumerable <UitstapInfo> OphalenVanGroep(int groepId, bool inschrijvenMogelijk) { IEnumerable <Uitstap> resultaat; var groep = (from g in _groepenRepo.Select() where g.ID == groepId select g).FirstOrDefault(); if (!_autorisatieMgr.IsGav(groep)) { throw FaultExceptionHelper.GeenGav(); } if (inschrijvenMogelijk) { // Enkel uitstappen van recentste groepswerkjaar var groepsWerkJaar = _groepsWerkJaarRepo.Select() .Where(gwj => gwj.Groep.ID == groepId) .OrderByDescending(gwj => gwj.WerkJaar) .First(); resultaat = groepsWerkJaar.Uitstap.ToArray(); } else { // Alle uitstappen ophalen resultaat = _uitstappenRepo.Select().Where(u => u.GroepsWerkJaar.Groep.ID == groepId).ToList(); } return(_mappingHelper.Map <IEnumerable <Uitstap>, IEnumerable <UitstapInfo> >(resultaat)); }
public void Check(Categorie g) { if (g == null || !_autorisatieMgr.IsGav(g.Groep)) { throw FaultExceptionHelper.GeenGav(); } }
public void Check(GelieerdePersoon g) { if (g == null || !_autorisatieMgr.IsGav(g)) { throw FaultExceptionHelper.GeenGav(); } }
public int?AangelogdeGebruikerLidIdGet(int groepID) { int?adNummer = _authenticatieMgr.AdNummerGet(); var ik = (from p in _personenRepo.Select() where p.AdNummer == adNummer select p).First(); // Mag ik mijn eigen gegevens lezen? if (_autorisatieMgr.MagLezen(ik, ik)) { throw FaultExceptionHelper.GeenGav(); } var lps = (from gp in ik.GelieerdePersoon where gp.Groep.ID == groepID select gp).ToList(); var leden = lps.SelectMany(gp => gp.Lid).ToList(); if (!leden.Any()) { return(null); } var maxJaar = leden.Max(l => l.GroepsWerkJaar.WerkJaar); return(leden.First(l => l.GroepsWerkJaar.WerkJaar == maxJaar).ID); }
public void Check(Persoon p) { if (p == null || !_autorisatieMgr.IsGav(p)) { throw FaultExceptionHelper.GeenGav(); } }
public int TypeToggle(int lidId) { var origineelLid = _ledenRepo.ByID(lidId); Lid nieuwLid = null; Gav.Check(origineelLid); try { nieuwLid = _ledenMgr.TypeToggle(origineelLid); } catch (FoutNummerException ex) { // Dit is misschien wat kort door de bocht: throw FaultExceptionHelper.FoutNummer(ex.FoutNummer, ex.Message); } #if KIPDORP using (var tx = new TransactionScope()) { #endif _ledenRepo.Delete(origineelLid); _ledenSync.TypeUpdaten(nieuwLid); _ledenSync.AfdelingenUpdaten(nieuwLid); _ledenRepo.SaveChanges(); #if KIPDORP tx.Complete(); } #endif return(nieuwLid.ID); }
public void Check(Lid g) { if (g == null || !_autorisatieMgr.IsGav(g)) { throw FaultExceptionHelper.GeenGav(); } }
public int Bewaren(int groepId, UitstapInfo info) { // Als de uitstap een ID heeft, moet een bestaande uitstap opgehaald worden. // Anders maken we een nieuwe. Uitstap uitstap; bool wasBivak = false; var groepsWerkJaar = _groepsWerkJaarRepo.Select() .Where(gwj => gwj.Groep.ID == groepId) .OrderByDescending(gwj => gwj.WerkJaar) .First(); if (!_autorisatieMgr.IsGav(groepsWerkJaar.Groep)) { throw FaultExceptionHelper.GeenGav(); } if (info.ID == 0) { // Nieuwe uitstap uitstap = _mappingHelper.Map <UitstapInfo, Uitstap>(info); uitstap.GroepsWerkJaar = groepsWerkJaar; groepsWerkJaar.Uitstap.Add(uitstap); } else { // Haal origineel op, gekoppeld aan groepswerkjaar uitstap = (from u in groepsWerkJaar.Uitstap where u.ID == info.ID select u).First(); wasBivak = uitstap.IsBivak; // overschrijf met gegevens uit 'info' _mappingHelper.Map(info, uitstap); } #if KIPDORP using (var tx = new TransactionScope()) { #endif _groepsWerkJaarRepo.SaveChanges(); if (uitstap.IsBivak) { _bivakSync.Bewaren(uitstap); } else if (wasBivak) { _bivakSync.Verwijderen(uitstap.ID); } #if KIPDORP tx.Complete(); } #endif return(uitstap.ID); }
public void FunctiesVervangen(int lidId, IEnumerable <int> functieIds) { var lid = _ledenRepo.ByID(lidId); if (_autorisatieMgr.PermissiesOphalen(lid) != Permissies.Bewerken) { throw FaultExceptionHelper.GeenGav(); } var functies = _functiesRepo.ByIDs(functieIds); // TODO: optimaliseren. Tien tegen 1 zijn al die functies aan dezelfde groep gekoppeld. // (Als ze al gekoppeld zijn, want de nationale functies hebben geen gekoppelde groep.) // In dat geval volstaat het om 1 check te doen, ipv een check per functie. // TIP: controleer GAV-schap functies.SelectMany(fn=>fn.Groep).Distinct(). if (functies.Any(functie => !_autorisatieMgr.PermissiesOphalen(functie).HasFlag(Permissies.Lezen))) { throw FaultExceptionHelper.GeenGav(); } try { _functiesMgr.Vervangen(lid, functies); } catch (FoutNummerException ex) { switch (ex.FoutNummer) { case FoutNummer.GroepsWerkJaarNietBeschikbaar: case FoutNummer.FunctieNietVanGroep: case FoutNummer.FunctieNietBeschikbaar: case FoutNummer.LidTypeVerkeerd: case FoutNummer.EMailVerplicht: case FoutNummer.ContactMoetNieuwsBriefKrijgen: // Deze exceptions verwachten we; we sturen een foutnummerfault throw FaultExceptionHelper.FoutNummer(ex.FoutNummer, ex.Message); default: // Onverwachte exception gooien we opnieuw op. throw; } } #if KIPDORP using (var tx = new TransactionScope()) { #endif _ledenRepo.SaveChanges(); _ledenSync.FunctiesUpdaten(lid); #if KIPDORP tx.Complete(); } #endif }
public LidInfo LidInfoOphalen(int lidID) { var lid = _ledenRepo.ByID(lidID); Gav.Check(lid); if (lid.NonActief) { FaultExceptionHelper.FoutNummer(FoutNummer.LidUitgeschreven, Resources.LidInactief); } return(_mappingHelper.Map <Lid, LidInfo>(lid)); }
public PersoonInfo PersoonOphalen(int lidID) { var lid = _ledenRepo.ByID(lidID); Gav.Check(lid); if (lid.NonActief) { FaultExceptionHelper.FoutNummer(FoutNummer.LidUitgeschreven, Resources.LidInactief); } return(_mappingHelper.Map <GelieerdePersoon, PersoonInfo>(lid.GelieerdePersoon)); }
public UitstapInfo Inschrijven(IList <int> gelieerdePersoonIDs, int geselecteerdeUitstapId, bool logistiekDeelnemer) { var uitstap = _uitstappenRepo.ByID(geselecteerdeUitstapId); Gav.Check(uitstap); var gelieerdePersonen = _gelieerdePersonenRepo.ByIDs(gelieerdePersoonIDs); if (!_autorisatieMgr.IsGav(gelieerdePersonen)) { throw FaultExceptionHelper.GeenGav(); } var groepen = (from gp in gelieerdePersonen select gp.Groep).Distinct().ToList(); Debug.Assert(groepen.Any()); // De gelieerde personen moeten aan een groep gekoppeld zijn. Debug.Assert(uitstap.GroepsWerkJaar != null); Debug.Assert(uitstap.GroepsWerkJaar.Groep != null); // Als er meer dan 1 groep is, dan is er minstens een groep verschillend van de groep // van de uitstap (duivenkotenprincipe)););); if (groepen.Count() > 1 || groepen.First().ID != uitstap.GroepsWerkJaar.Groep.ID) { throw new FoutNummerException( FoutNummer.UitstapNietVanGroep, Resources.FoutieveGroepUitstap); } // Koppel enkel de gelieerde personen die nog niet aan de uitstap gekoppeld zijn foreach (var gp in gelieerdePersonen.Where(gp => gp.Deelnemer.All(d => d.Uitstap.ID != uitstap.ID))) { var deelnemer = new Deelnemer { GelieerdePersoon = gp, Uitstap = uitstap, HeeftBetaald = false, IsLogistieker = logistiekDeelnemer, MedischeFicheOk = false }; // Moet dat nu nog alle twee gebeuren? gp.Deelnemer.Add(deelnemer); uitstap.Deelnemer.Add(deelnemer); } _gelieerdePersonenRepo.SaveChanges(); return(_mappingHelper.Map <Uitstap, UitstapInfo>(uitstap)); }
public void RechtenToekennen(int gelieerdePersoonId, GebruikersRecht gebruikersRecht) { var gelieerdePersoon = _gelieerdePersonenRepo.ByID(gelieerdePersoonId); Gav.Check(gelieerdePersoon); if (gebruikersRecht == null) { // Als er geen gebruikersrechten meegegeven zijn, dan geven we de gelieerde persoon // rechten 'geen' op zijn eigen groep. gebruikersRecht = new GebruikersRecht(); } var p = gelieerdePersoon.Persoon; if (p.AdNummer == null) { throw FaultExceptionHelper.FoutNummer(FoutNummer.AdNummerVerplicht, Resources.AdNummerVerplicht); } if (string.IsNullOrEmpty(_gelieerdePersonenMgr.ContactEmail(gelieerdePersoon))) { throw FaultExceptionHelper.FoutNummer(FoutNummer.EMailVerplicht, Resources.EmailOntbreekt); } _gebruikersRechtenMgr.ToekennenOfWijzigen(gelieerdePersoon.Persoon, gelieerdePersoon.Groep, gebruikersRecht.PersoonsPermissies, gebruikersRecht.GroepsPermissies, gebruikersRecht.AfdelingsPermissies, gebruikersRecht.IedereenPermissies); #if KIPDORP using (var tx = new TransactionScope()) { #endif _rechtenRepo.SaveChanges(); // Zoekt de gegeven gebruiker in active directory. Maakt die gebruiker aan als die nog // niet bestaat. En voegt hem/haar toe aan de groep GapGebruikers. ServiceHelper.CallService <IAdService, string>( svc => svc.GapLoginAanvragen(p.AdNummer.Value, p.VoorNaam, p.Naam, _gelieerdePersonenMgr.ContactEmail(gelieerdePersoon))); #if KIPDORP tx.Complete(); } #endif }
public BivakAangifteLijstInfo BivakStatusOphalen(int groepId) { var resultaat = new BivakAangifteLijstInfo(); var gwjQuery = _groepsWerkJaarRepo.Select(); var groepsWerkJaar = gwjQuery.Where(gwj => gwj.Groep.ID == groepId).OrderByDescending(gwj => gwj.WerkJaar).FirstOrDefault(); if (groepsWerkJaar == null || !_autorisatieMgr.IsGav(groepsWerkJaar)) { throw FaultExceptionHelper.GeenGav(); } if (!_uitstappenMgr.BivakAangifteVanBelang(groepsWerkJaar)) { resultaat.AlgemeneStatus = BivakAangifteStatus.NogNietVanBelang; } else { resultaat.Bivakinfos = (from u in groepsWerkJaar.Uitstap where u.IsBivak select new BivakAangifteInfo { ID = u.ID, Omschrijving = u.Naam, Status = _uitstappenMgr.StatusBepalen(u) }).ToList(); if (resultaat.Bivakinfos.FirstOrDefault() == null) { resultaat.AlgemeneStatus = BivakAangifteStatus.Ontbrekend; } else if (resultaat.Bivakinfos.Any(bi => bi.Status != BivakAangifteStatus.Ok)) { resultaat.AlgemeneStatus = BivakAangifteStatus.Ontbrekend; } else { resultaat.AlgemeneStatus = BivakAangifteStatus.Ok; } } return(resultaat); }
public GebruikersDetail DetailsOphalen(int adNummer, bool aanMaken) { int?mijnAdNummer = _authenticatieMgr.AdNummerGet(); if (mijnAdNummer == null) { throw FaultExceptionHelper.FoutNummer(FoutNummer.KoppelingLoginPersoonOntbreekt, String.Format( Resources.KoppelingLoginPersoonOntbreekt, _authenticatieMgr.GebruikersNaamGet(), mijnAdNummer)); } var persoon = (from p in _personenRepo.Select() where p.AdNummer == adNummer select p).FirstOrDefault(); var ik = (from p in _personenRepo.Select() where p.AdNummer == mijnAdNummer select p).FirstOrDefault(); if (persoon == null && aanMaken) { // We gaan de persoon registreren. Als hij nog niet bestond, had hij nog geen rechten. // TODO: gegevens ophalen uit Civi, ipv leeg te laten (zie #5612). persoon = new Persoon { // FIXME: stub-naam is niet zo goed. Misschien login erin verwerken? VoorNaam = adNummer.ToString(), Naam = "AD-nummer", AdNummer = mijnAdNummer, Geslacht = GeslachtsType.Onbekend, }; _personenRepo.Add(persoon); _personenRepo.SaveChanges(); } // Controleer gebruikersrechten. Ik test ook op AD-nummer, want als ik mezelf net heb // aangemaakt loopt het anders fout. if (adNummer != mijnAdNummer && !_autorisatieMgr.MagLezen(ik, persoon)) { throw FaultExceptionHelper.GeenGav(); } return(_mappingHelper.Map <Persoon, GebruikersDetail>(persoon)); }
public int LoonVerliesVerzekeren(int lidId) { PersoonsVerzekering persoonsVerzekering; var lid = _ledenRepo.ByID(lidId); Gav.Check(lid); if (lid.GroepsWerkJaar.Groep.StopDatum != null && lid.GroepsWerkJaar.Groep.StopDatum < DateTime.Now) { throw FaultExceptionHelper.FoutNummer(FoutNummer.GroepInactief, Resources.GroepInactief); } var verzekeringstype = (from g in _verzekerRepo.Select() where g.ID == (int)Verzekering.LoonVerlies select g).First(); try { persoonsVerzekering = _verzekeringenMgr.Verzekeren(lid, verzekeringstype, DateTime.Today, _groepsWerkJarenMgr.EindDatum(lid.GroepsWerkJaar)); } catch (FoutNummerException ex) { throw FaultExceptionHelper.FoutNummer(ex.FoutNummer, ex.Message); } catch (BlokkerendeObjectenException <PersoonsVerzekering> ) { // TODO: beter faultcontract. (VerzekeringsInfo?) throw FaultExceptionHelper.BestaatAl("Verzekering"); } #if KIPDORP using (var tx = new TransactionScope()) { #endif _verzekeringenSync.Bewaren(persoonsVerzekering, lid.GroepsWerkJaar); _ledenRepo.SaveChanges(); #if KIPDORP tx.Complete(); } #endif return(lid.GelieerdePersoon.ID); }
public void RechtenAfnemen(int persoonID, int[] groepIDs) { var persoon = _personenRepo.ByID(persoonID); Gav.Check(persoon); if (persoon == null) { throw FaultExceptionHelper.GeenGav(); } var teExpirenRechten = (from g in persoon.GebruikersRechtV2 where (g.VervalDatum == null || g.VervalDatum >= DateTime.Today) && groepIDs.Contains(g.Groep.ID) select g).ToList(); foreach (var gr in teExpirenRechten) { gr.VervalDatum = DateTime.Today.AddDays(-1); } _rechtenRepo.SaveChanges(); }
public void AfdelingenVervangenBulk(IList <int> lidIds, IList <int> afdelingsJaarIds) { // Dit is een beetje een rare functie. Als er meerdere leden zijn, en meerdere afdelingen, dan moeten // die leden allemaal kindleden zijn van hetzelfde groepswerkjaar. Anders gaat het mis. // TODO: een en ander verhuizen naar workers. var leden = _ledenRepo.ByIDs(lidIds); List <AfdelingsJaar> afdelingsJaren; if (afdelingsJaarIds.Any()) { var gwjs = (from l in leden select l.GroepsWerkJaar).Distinct().ToList(); if (gwjs.Count() != 1) { // Er zijn groepswerkjaren meegegeven. Een afdelingsjaar is steeds gekoppeld // aan precies 1 groepswerkjaar. // De leden komen uit meer dan 1 groepswerkjaar. Het afdelingsjaar kan dus // nooit gekoppeld zijn aan het groepswerkjaar van elk lid. // (pigeon hole principle) throw FaultExceptionHelper.FoutNummer(FoutNummer.AfdelingNietVanGroep, Resources.OngelidgeAfdelingVoorLid); } afdelingsJaren = (from aj in gwjs.First().AfdelingsJaar where afdelingsJaarIds.Contains(aj.ID) select aj).ToList(); if (afdelingsJaarIds.Count != afdelingsJaren.Count) { // Niet alle afdelingsjaren zijn gevonden in het groepswerkjaar van de leden. throw FaultExceptionHelper.FoutNummer(FoutNummer.AfdelingNietVanGroep, Resources.OngelidgeAfdelingVoorLid); } } else { afdelingsJaren = new List <AfdelingsJaar>(); } if (!_autorisatieMgr.IsGav(leden)) { throw FaultExceptionHelper.GeenGav(); } foreach (var lid in leden) { try { _ledenMgr.AfdelingsJarenVervangen(lid, afdelingsJaren); } catch (FoutNummerException ex) { if (ex.FoutNummer == FoutNummer.AlgemeneKindFout) { throw FaultExceptionHelper.FoutNummer(FoutNummer.AfdelingKindVerplicht, Resources.KindInEenAfdelingsJaar); } else { throw; } } } #if KIPDORP using (var tx = new TransactionScope()) { #endif foreach (var l in leden) { _ledenSync.AfdelingenUpdaten(l); } _ledenRepo.SaveChanges(); #if KIPDORP tx.Complete(); } #endif }
public string VerzekeringsUrlGet(int groepID) { int?adNummer = _authenticatieMgr.AdNummerGet(); GelieerdePersoon mijnGp = null; if (adNummer == null) { throw FaultExceptionHelper.GeenGav(); } var ik = (from p in _personenRepo.Select() where p.AdNummer == adNummer select p).First(); if (ik != null) { mijnGp = (from gp in ik.GelieerdePersoon where gp.Groep.ID == groepID select gp).FirstOrDefault(); } if (mijnGp == null) { throw new FaultException <FoutNummerFault>(new FoutNummerFault { Bericht = Resources.KoppelingLoginPersoonOntbreekt, FoutNummer = FoutNummer.KoppelingLoginPersoonOntbreekt }); } // haal puntkomma's uit onderdelen, want die zijn straks veldseparatiedingen var naam = String.Format("{0} {1}", mijnGp.Persoon.VoorNaam, mijnGp.Persoon.Naam).Replace(';', ','); var stamnr = (from gr in ik.GebruikersRechtV2 where gr.Groep.ID == groepID select gr.Groep.Code).First().Replace(';', ','); string email = mijnGp.Communicatie.Where(comm => comm.CommunicatieType.ID == (int)CommunicatieTypeEnum.Email) .OrderByDescending(comm => comm.Voorkeur) .Select(comm => comm.Nummer).FirstOrDefault(); if (email == null) { throw new FaultException <FoutNummerFault>(new FoutNummerFault { Bericht = Resources.EmailOntbreekt, FoutNummer = FoutNummer.EMailVerplicht }); } email = email.Replace(';', ','); var cp = new CredentialsProvider(Settings.Default.EncryptieSleutel, Settings.Default.HashSleutel); var credentials = cp.Genereren(String.Format("{0};{1};{2};{3:dd/MM/yyyy H:mm:ss zzz}", naam, stamnr, email, DateTime.Now)); return(String.Format(Settings.Default.UrlVerzekeraar, HttpUtility.UrlEncode(credentials.GeencrypteerdeUserInfo), HttpUtility.UrlEncode(credentials.Hash))); }
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); }
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); }
public void Uitschrijven(IList <int> gelieerdePersoonIDs, out string foutBerichten) { // Deze code is tamelijk rommelig; gebruik ze niet als referentie-implementatie // (Ik ben er ook niet van overtuigd of het werken met 'foutBerichten' wel in orde is.) var teVerwijderen = new List <Lid>(); var stopDatumBewaren = new List <Lid>(); var foutBerichtenBuilder = new StringBuilder(); var gelieerdePersonen = _gelieerdePersonenRepo.ByIDs(gelieerdePersoonIDs); if (!_autorisatieMgr.IsGav(gelieerdePersonen) || gelieerdePersoonIDs.Count() != gelieerdePersonen.Count) { throw FaultExceptionHelper.GeenGav(); } var groepen = (from gp in gelieerdePersonen select gp.Groep).Distinct(); foreach (var g in groepen) { if (g.StopDatum != null && g.StopDatum < DateTime.Now) { throw FaultExceptionHelper.FoutNummer(FoutNummer.GroepInactief, Resources.GroepInactief); } var gwj = _groepenMgr.HuidigWerkJaar(g); // Handel per groep de uitschrijvingen af, zodat we per groep kunnen // controleren of de persoon wel ingeschreven is in het recentste groepswerkjaar. Groep g1 = g; foreach (var gp in gelieerdePersonen.Where(gp => Equals(gp.Groep, g1))) { var lid = gp.Lid.FirstOrDefault(e => e.GroepsWerkJaar.ID == gwj.ID); if (lid == null) { foutBerichtenBuilder.AppendLine(String.Format(Resources.IsNogNietIngeschreven, gp.Persoon.VolledigeNaam)); continue; } if (lid.NonActief) { foutBerichtenBuilder.AppendLine(String.Format(Resources.IsAlUitgeschreven, gp.Persoon.VolledigeNaam)); continue; } lid.UitschrijfDatum = DateTime.Now; lid.Functie.Clear(); if (lid.EindeInstapPeriode > lid.UitschrijfDatum || lid.Niveau > Niveau.Groep) { teVerwijderen.Add(lid); } else { stopDatumBewaren.Add(lid); } } } foutBerichten = foutBerichtenBuilder.ToString(); #if KIPDORP using (var tx = new TransactionScope()) { #endif _gelieerdePersonenRepo.SaveChanges(); foreach (var l in teVerwijderen) { _ledenSync.Verwijderen(l); } foreach (var l in stopDatumBewaren) { _ledenSync.Bewaren(l); } #if KIPDORP tx.Complete(); } #endif }