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