public async Task <IActionResult> Moment(string id) { if (string.IsNullOrEmpty(id) || !int.TryParse(id, out var i)) { var moment = new TelMomentHouder { Beurzen = new List <TelMomentModel>() }; foreach (var beurs in await BeurzenManager.GetBeurzenAsync()) { moment.Beurzen.Add(new TelMomentModel { BeursId = beurs.BeursId, BeursNaam = beurs.Naam, }); } return(View(moment)); } using (var db = new ApplicationDbContext()) { var moment = await db.TelMomenten.Include(x => x.Beurzen) .SingleAsync(x => x.TelMomentHouderId == i); return(View(moment)); } }
public async Task <IActionResult> Opslaan(TelMomentHouder model) { if (model.Invoerder == null) { model.Invoerder = User.Identity.Name; model.Tijd = DateTime.Now; foreach (var telMomentModel in model.Beurzen) { telMomentModel.Tijd = model.Tijd; } using (var db = new ApplicationDbContext()) { await db.TelMomenten.AddAsync(model); await db.SaveChangesAsync(); } await Berekeningen.Aanwezigheid.BerekenBeurzen(model); } else { using (var db = new ApplicationDbContext()) { var dbHouder = await db.TelMomenten.Include(x => x.Beurzen) .SingleAsync(x => x.TelMomentHouderId == model.TelMomentHouderId); dbHouder.LaatstBewerkt = DateTime.Now; dbHouder.Bewerker = User.Identity.Name; foreach (var telMomentModel in dbHouder.Beurzen) { var nieuweWaarde = model.Beurzen.FirstOrDefault(x => x.BeursId == telMomentModel.BeursId); if (nieuweWaarde != null && telMomentModel.Aantal != nieuweWaarde.Aantal) { telMomentModel.Aantal = nieuweWaarde.Aantal; } } await db.SaveChangesAsync(); await Berekeningen.Aanwezigheid.BerekenBeurzen(dbHouder); } } return(RedirectToAction("Index")); }
public static async Task BerekenBeurzen(TelMomentHouder telMoment) { using (var db = new ApplicationDbContext()) { //Haal de beurzen uit de database, itereer over hen var beurzen = await db.Beurzen.Include(x => x.Waardes).ToListAsync(); foreach (var beurs in beurzen) { //We moeten zeker zijn dat de waarde geordend zijn op tijd beurs.Waardes = beurs.Waardes.OrderBy(x => x.Tijd).ToList(); //als er al een waarde is die uitgerekend is door aanwezigheid, en dezelfde tijd als deze heeft //zijn we deze aan het bewerken if (beurs.Waardes.Any(x => x.Type == BeursWaardes.WaardeType.Aanwezigheid && x.Tijd == telMoment.Tijd)) { //We pakken de beurs waar het telmoment naar verwijst aan de hand van het beurs id var telBeurs = telMoment.Beurzen.FirstOrDefault(x => x.BeursId == beurs.BeursId); if (telBeurs == null) { throw new NullReferenceException("Beurs is null."); } //pak de telmomenten voor de huidige beurs die niet het huidige moment zijn, en die //voor dit telmoment hebben plaatsgevonden. We nemen hier de laatste drie van. var telMomenten = await db.TelMomentModel. Where(x => x.BeursId == beurs.BeursId && x.TelMomentModelId != telBeurs.TelMomentModelId && x.Tijd < telMoment.Tijd) .OrderByDescending(x => x.Tijd) .Take(3) .ToListAsync(); //bereken de beurswaarde var waarde = BerekenBeurs(beurs, telMomenten, telBeurs); //verwijder de oude waarde beurs.Waardes.Remove(beurs.Waardes .FirstOrDefault(x => x.Type == BeursWaardes.WaardeType.Aanwezigheid && x.Tijd == telMoment.Tijd)); //voeg de geupdate waarde toe beurs.Waardes.Add(waarde); } else { //We pakken de beurs waar het telmoment naar verwijst aan de hand van het beurs id var telBeurs = telMoment.Beurzen.FirstOrDefault(x => x.BeursId == beurs.BeursId); if (telBeurs == null) { throw new NullReferenceException("Beurs is null."); } //pak de telmomenten voor de huidige beurs die niet het huidige moment zijn, // We nemen hier de laatste drie van. var telMomenten = await db.TelMomentModel. Where(x => x.BeursId == beurs.BeursId && x.TelMomentModelId != telBeurs.TelMomentModelId) .OrderByDescending(x => x.Tijd) .Take(3) .ToListAsync(); //bereken de beurswaarde var waarde = BerekenBeurs(beurs, telMomenten, telBeurs); //voeg de geupdate waarde toe beurs.Waardes.Add(waarde); //update de beurs db.Update(beurs); } } //verwijder de locale cache, en update deze met de nieuwe beruzen await BeurzenManager.SetCache(beurzen); //sla de veranderingen in de database op await db.SaveChangesAsync(); } }