Пример #1
0
        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));
            }
        }
Пример #2
0
        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"));
        }
Пример #3
0
        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();
            }
        }