Exemplo n.º 1
0
        public async Task <IActionResult> Create([Bind("TransactieId,Datum,Bedrag,Omschrijving,VanRekeningId,NaarRekeningId,CategorieId")] Transactie transactie)
        {
            if (ModelState.IsValid)
            {
                await _transactiesService.DetermineCategorieAsync(transactie);

                _transactiesService.Add(transactie);
                await _transactiesService.SaveChangesAsync();

                return(RedirectToAction(nameof(Details), new { id = transactie.TransactieId }));
            }
            await SetSelectListsAsync(transactie);

            return(View(transactie));
        }
Exemplo n.º 2
0
        private async Task <List <string> > ImportTransactiesOudeApplicatieAsync(List <List <string> > importRows)
        {
            var messages = new List <string>();

            //Massa import, laad alle categorieën en rekeningen van te voren in.
            var rekeningenTask  = _rekeningenService.GetListAsync();
            var categorieenTask = _categorieenService.GetListAsync();
            await Task.WhenAll(rekeningenTask, categorieenTask);

            var rekeningen  = rekeningenTask.Result;
            var categorieen = categorieenTask.Result;

            foreach (var importRow in importRows)
            {
                var errorMessages = new List <string>();
                var infoMessages  = new List <string>();

                var transactie = new Transactie
                {
                    Omschrijving = string.IsNullOrWhiteSpace(importRow[4]) ? null : importRow[4].Trim().Replace("-ENTER-", Environment.NewLine)
                };

                var datumImportValue = importRow[0].Trim();
                if (DateTime.TryParseExact(datumImportValue, "d-M-yyyy", CultureInfo.CurrentCulture, DateTimeStyles.None, out DateTime datum))
                {
                    transactie.Datum = datum;
                }
                else
                {
                    errorMessages.Add($"Transactie '{transactie.Omschrijving}' is overgeslagen, '{datumImportValue}' is geen geldige datum.");
                }

                var bedragImportValue = importRow[1].Trim();
                if (decimal.TryParse(bedragImportValue, NumberStyles.Number, CultureInfo.CurrentCulture, out decimal bedrag))
                {
                    transactie.Bedrag = bedrag;
                }
                else
                {
                    errorMessages.Add($"Transactie '{transactie.Omschrijving}' is overgeslagen, '{bedragImportValue}' is geen geldig bedrag.");
                }

                var vanRekeningImportValue = importRow[2].Trim();
                transactie.VanRekening = FindRekeningByNaam(rekeningen, vanRekeningImportValue);
                if (transactie.VanRekening == null)
                {
                    //Validatie werkt op Id, die niet null kan zijn (maar 0).
                    errorMessages.Add($"Transactie '{transactie.Omschrijving}' is overgeslagen, '{vanRekeningImportValue}' is geen geldige rekening.");
                }
                else
                {
                    //Validatie werkt op Id, zet voor nu expliciet (voor o.a. de Unlike validator)
                    transactie.VanRekeningId = transactie.VanRekening.RekeningId;
                }

                var naarRekeningImportValue = importRow[3].Trim();
                transactie.NaarRekening = FindRekeningByNaam(rekeningen, naarRekeningImportValue);
                if (transactie.NaarRekening == null)
                {
                    //Validatie werkt op Id, die niet null kan zijn (maar 0).
                    errorMessages.Add($"Transactie '{transactie.Omschrijving}' is overgeslagen, '{naarRekeningImportValue}' is geen geldige rekening.");
                }
                else
                {
                    //Validatie werkt op Id, zet voor nu expliciet (voor o.a. de Unlike validator)
                    transactie.NaarRekeningId = transactie.NaarRekening.RekeningId;
                }

                var validationResults = new List <ValidationResult>();
                Validator.TryValidateObject(transactie, new ValidationContext(transactie, null, null), validationResults, true);
                foreach (var validationResult in validationResults)
                {
                    errorMessages.Add($"Transactie '{transactie.Omschrijving}' is overgeslagen, {validationResult.ErrorMessage}");
                }

                //Doe categorie, alleen indien er nog geen fouten zijn
                if (!errorMessages.Any())
                {
                    var categorieImportValue = importRow[5].Trim();
                    (var categorie, var categorieErrorMessages) = FindOrImportCategorie(categorieen, categorieImportValue);
                    transactie.Categorie = categorie;
                    foreach (var categorieErrorMessage in categorieErrorMessages)
                    {
                        infoMessages.Add($"Transactie '{transactie.Omschrijving}' bevat een ongeldige categorie, {categorieErrorMessage} categorie is op leeg gezet.");
                    }
                }

                if (errorMessages.Any())
                {
                    messages.AddRange(errorMessages);
                }
                else
                {
                    messages.AddRange(infoMessages);
                    //DetermineCategorieAsync dient niet aangeroepen te worden. De oude applicatie heeft dit bepaald
                    _transactiesService.Add(transactie);
                }
            }
            await _transactiesService.SaveChangesAsync();

            return(messages);
        }