static async Task Transactie(String PasID, String RekeningID, double balans) { int RekeningIDint; Int32.TryParse(RekeningID, out RekeningIDint); using (var client = new HttpClient()) { client.BaseAddress = new Uri("http://localhost:50752/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //HTTPpost part var trans = new Transactie() { Balans = balans, PasID = PasID, RekeningID = RekeningIDint, AtmID = "HRO" }; HttpResponseMessage response = await client.PostAsJsonAsync("api/transacties", trans).ConfigureAwait(false); if (response.IsSuccessStatusCode) { //Error.show("TRANSACTIE SUCCEED"); } else { Error.show("TRANSACTIE FAILED"); } } }
public IHttpActionResult PutTransactie(int id, Transactie transactie) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != transactie.TransactieID) { return(BadRequest()); } db.Entry(transactie).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException) { if (!TransactieExists(id)) { return(NotFound()); } else { throw; } } return(StatusCode(HttpStatusCode.NoContent)); }
public async Task <IActionResult> Edit(int id, [Bind("TransactieId,Datum,Bedrag,Omschrijving,VanRekeningId,NaarRekeningId,CategorieId")] Transactie transactie) { if (id != transactie.TransactieId) { return(NotFound()); } if (ModelState.IsValid) { try { _transactiesService.Update(transactie); await _transactiesService.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!await _transactiesService.ExistsAsync(transactie.TransactieId)) { return(NotFound()); } else { throw; } } return(RedirectToAction(nameof(Details), new { id = transactie.TransactieId })); } await SetSelectListsAsync(transactie); return(View(transactie)); }
private async Task Transactie(String PasID, String RekeningID, int balans) { System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; using (var client = new HttpClient(new HttpClientHandler { UseProxy = false, ClientCertificateOptions = ClientCertificateOption.Automatic })) { client.BaseAddress = new Uri("https://hrsqlapp.tk"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var trans = new Transactie() { Balans = balans, PasID = Int32.Parse(PasID), RekeningID = RekeningID, locatie = "HRO" }; HttpResponseMessage response = await client.PostAsJsonAsync("api/transacties", trans).ConfigureAwait(false); if (response.IsSuccessStatusCode) { //Error.show("SUCCES"); } else { //Error.show("FAIL"); } } }
static async Task Transactie(string PasID, string RekeningID, int balans) { String RekeningIDint; string locatie = "HollandBank-Locatie21"; //Int32.TryParse(RekeningID, out RekeningIDint); System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls; using (var client = new HttpClient(new HttpClientHandler { UseProxy = false, ClientCertificateOptions = ClientCertificateOption.Automatic })) { client.BaseAddress = new Uri("https://hrsqlapp.tk/"); client.DefaultRequestHeaders.Accept.Clear(); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //HTTPpost part var trans = new Transactie() { Bedrag = balans, Locatie = locatie, RekeningID = RekeningID }; HttpResponseMessage response = await client.PostAsJsonAsync("api/transacties", trans).ConfigureAwait(false); if (response.IsSuccessStatusCode) { //Error.show("TRANSACTIE SUCCEED"); } else { Error.show("TRANSACTIE FAILED"); } } }
public async Task <IActionResult> PostTransactie([FromBody] TransactiePostModel transactiePM) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Transactie transactie = new Transactie() { LaatstGewijzigd = DateTime.Now, Bedrag = transactiePM.Bedrag, Datum = transactiePM.Datum, Omschrijving = transactiePM.Omschrijving, Type = transactiePM.Type, Document = transactiePM.Document, DocumentNaam = transactiePM.DocumentNaam, VanRekening = transactiePM.VanRekening, NaarRekening = transactiePM.NaarRekening, TransactieLabels = new List <TransactieLabel>() }; foreach (var newLabelId in transactiePM.Label) { Label label = _context.Label.Where(l => l.Id == newLabelId).First(); transactie.TransactieLabels.Add ( nieuwTransactieLabel(transactie, label) ); } _context.Transactie.Add(transactie); await _context.SaveChangesAsync(); return(CreatedAtAction("GetTransactie", new { id = transactie.Id }, transactie)); }
public ActionResult DeleteConfirmed(int id) { Transactie transactie = db.Transacties.Find(id); db.Transacties.Remove(transactie); db.SaveChanges(); return(RedirectToAction("Index")); }
private async Task SetSelectListsAsync(Transactie transactie) { var rekeningenTask = _rekeningenService.GetSelectListAsync(); var categorieenTask = _categorieenService.GetSelectListAsync(); await Task.WhenAll(rekeningenTask, categorieenTask); ViewData["NaarRekeningId"] = SelectListUtil.GetSelectList(rekeningenTask.Result, transactie.NaarRekeningId); ViewData["VanRekeningId"] = SelectListUtil.GetSelectList(rekeningenTask.Result, transactie.VanRekeningId); ViewData["CategorieId"] = SelectListUtil.GetSelectList(categorieenTask.Result, transactie.CategorieId); }
private TransactieLabel nieuwTransactieLabel(Transactie transactie, Label label) { return(new TransactieLabel { Transactie = transactie, Label = label, TransactieId = transactie.Id, LabelId = label.Id }); }
public ActionResult Edit([Bind(Include = "TransactieID,RekeningID,Bedrag,PasID")] Transactie transactie) { if (ModelState.IsValid) { db.Entry(transactie).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } return(View(transactie)); }
public async Task <IActionResult> PutTransactie([FromRoute] int id, [FromBody] TransactiePostModel transactiePM) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != transactiePM.Id) { return(BadRequest()); } Transactie transactie = _context.Transactie.Where(a => a.Id == id).Include(a => a.TransactieLabels).First(); transactie.LaatstGewijzigd = DateTime.Now; transactie.Bedrag = transactiePM.Bedrag; transactie.Datum = transactiePM.Datum; transactie.Omschrijving = transactiePM.Omschrijving; transactie.Type = transactiePM.Type; transactie.Document = transactiePM.Document; transactie.DocumentNaam = transactiePM.DocumentNaam; transactie.VanRekening = transactiePM.VanRekening; transactie.NaarRekening = transactiePM.NaarRekening; transactie.TransactieLabels.Clear(); foreach (var newLabelId in transactiePM.Label) { Label label = _context.Label.Where(l => l.Id == newLabelId).First(); transactie.TransactieLabels.Add ( nieuwTransactieLabel(transactie, label) ); } _context.Entry(transactie).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!TransactieExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
public IHttpActionResult GetTransactie(int id) { Transactie transactie = db.Transacties.Find(id); if (transactie == null) { return(NotFound()); } return(Ok(transactie)); }
public ActionResult Create([Bind(Include = "TransactieID,RekeningID,Bedrag,PasID")] Transactie transactie) { if (ModelState.IsValid) { db.Transacties.Add(transactie); db.SaveChanges(); return(RedirectToAction("Index")); } return(View(transactie)); }
public IHttpActionResult PostTransactie(Transactie transactie) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } db.Transacties.Add(transactie); db.SaveChanges(); return(CreatedAtRoute("DefaultApi", new { id = transactie.TransactieID }, transactie)); }
public IHttpActionResult DeleteTransactie(int id) { Transactie transactie = db.Transacties.Find(id); if (transactie == null) { return(NotFound()); } db.Transacties.Remove(transactie); db.SaveChanges(); return(Ok(transactie)); }
// GET: Transacties/Delete/5 public ActionResult Delete(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Transactie transactie = db.Transacties.Find(id); if (transactie == null) { return(HttpNotFound()); } return(View(transactie)); }
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)); }
// GET: Transacties/Create public async Task <IActionResult> Create() { //Bij aanmaken transactie deze voorvullen var instellingen = await _instellingenService.GetSingleAsync(); var transactie = new Transactie { Datum = DateTime.Today, Bedrag = 0, VanRekeningId = instellingen.StandaardVanRekeningId ?? 0 }; await SetSelectListsAsync(transactie); return(View(transactie)); }
public async Task <IActionResult> DupliceerTransactie([FromRoute] int id) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } Transactie bronTransactie = _context.Transactie .Include(a => a.TransactieLabels) .ThenInclude(transactieLabel => transactieLabel.Label) .FirstOrDefault(t => t.Id == id); Transactie transactie = new Transactie() { LaatstGewijzigd = DateTime.Now, Bedrag = bronTransactie.Bedrag, Datum = bronTransactie.Datum, Omschrijving = bronTransactie.Omschrijving, Type = bronTransactie.Type, Document = bronTransactie.Document, DocumentNaam = bronTransactie.DocumentNaam, VanRekening = bronTransactie.VanRekening, NaarRekening = bronTransactie.NaarRekening, TransactieLabels = new List <TransactieLabel>() }; foreach (var transactieLabel in bronTransactie.TransactieLabels) { Label label = _context.Label.Where(l => l.Id == transactieLabel.LabelId).First(); transactie.TransactieLabels.Add ( nieuwTransactieLabel(transactie, label) ); } _context.Transactie.Add(transactie); await _context.SaveChangesAsync(); return(CreatedAtAction("GetTransactie", new { id = transactie.Id }, transactie)); }
static void Main(string[] args) { Dictionary <string, decimal> transactiesD = new Dictionary <string, decimal>(); Queue <Transactie> transactiesQ = new Queue <Transactie>(); Transactie louis = new Transactie("Louis", 200); Transactie karen = new Transactie("Karen", 150); Transactie sarah = new Transactie("Sarah", -100); Transactie karen1 = new Transactie("Karen", -50); Transactie louis1 = new Transactie("Louis", 20); Transactie emma = new Transactie("Emma", 4); Transactie louis2 = new Transactie("Louis", -200); transactiesQ.Enqueue(louis); transactiesQ.Enqueue(karen); transactiesQ.Enqueue(sarah); transactiesQ.Enqueue(karen1); transactiesQ.Enqueue(louis1); transactiesQ.Enqueue(emma); transactiesQ.Enqueue(louis2); while (transactiesQ.Count > 0) { Transactie personTemp = transactiesQ.Dequeue(); if (transactiesD.ContainsKey(personTemp.naam)) { transactiesD[personTemp.naam] += personTemp.bedrag; } else { transactiesD.Add(personTemp.naam, personTemp.bedrag); } } PrintOutDict(transactiesD); }
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); }
private async Task <List <string> > ImportTransactiesOudeExcelAsync(List <List <string> > importRows) { var messages = new List <string>(); //Massa import, laad alle rekeningen van te voren in. var rekeningen = await _rekeningenService.GetListAsync(); for (var rowIndex = 0; rowIndex < importRows.Count; rowIndex++) { var importRow = importRows[rowIndex]; var errorMessages = new List <string>(); var transactie = new Transactie { Omschrijving = string.IsNullOrWhiteSpace(importRow[4]) ? null : importRow[4].Trim() }; 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 op regel {rowIndex + 1} 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 op regel {rowIndex + 1} is overgeslagen, '{bedragImportValue}' is geen geldig bedrag."); } var vanRekeningImportValue = importRow[2].Trim(); (var rekening, var rekeningErrorMessages) = FindOrImportRekening(rekeningen, string.Empty, vanRekeningImportValue); if (rekening == null) { //Validatie werkt op Id, die niet null kan zijn (maar 0). foreach (var rekeningErrorMessage in rekeningErrorMessages) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {rekeningErrorMessage}"); } } else { //Validatie werkt op Id, zet voor nu expliciet (voor o.a. de Unlike validator) transactie.VanRekening = rekening; transactie.VanRekeningId = transactie.VanRekening.RekeningId; } var naarRekeningImportValue = importRow[3].Trim(); (rekening, rekeningErrorMessages) = FindOrImportRekening(rekeningen, string.Empty, naarRekeningImportValue); if (rekening == null) { //Validatie werkt op Id, die niet null kan zijn (maar 0). foreach (var rekeningErrorMessage in rekeningErrorMessages) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {rekeningErrorMessage}"); } } else { //Validatie werkt op Id, zet voor nu expliciet (voor o.a. de Unlike validator) transactie.NaarRekening = rekening; transactie.NaarRekeningId = transactie.NaarRekening.RekeningId; } await _transactiesService.DetermineCategorieAsync(transactie); var validationResults = new List <ValidationResult>(); Validator.TryValidateObject(transactie, new ValidationContext(transactie, null, null), validationResults, true); foreach (var validationResult in validationResults) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {validationResult.ErrorMessage}"); } if (errorMessages.Any()) { messages.AddRange(errorMessages); } else { _transactiesService.Add(transactie); } } await _transactiesService.SaveChangesAsync(); return(messages); }
private async Task <List <string> > ImportTransactiesRabobankCsv2018Async(List <List <string> > importRows) { var messages = new List <string>(); //Massa import, laad alle rekeningen en instellingen van te voren in. var rekeningenTask = _rekeningenService.GetListAsync(); var instellingenTask = _instellingenService.GetSingleAsync(); await Task.WhenAll(rekeningenTask, instellingenTask); var rekeningen = rekeningenTask.Result; var instellingen = instellingenTask.Result; var importedTransacties = new List <Transactie>(); for (var rowIndex = 0; rowIndex < importRows.Count; rowIndex++) { var importRow = importRows[rowIndex]; var errorMessages = new List <string>(); var infoMessages = new List <string>(); var eigenRekeningnummer = importRow[0].Trim(); var datumImportValue = importRow[4].Trim(); if (!DateTime.TryParseExact(datumImportValue, "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.None, out DateTime datum)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, '{datumImportValue}' is geen geldige datum."); } var isBijschrijving = false; var isBijschrijvingImportValue = importRow[6].Trim(); if (isBijschrijvingImportValue.Length >= 1) { isBijschrijvingImportValue = isBijschrijvingImportValue.Substring(0, 1); } if (isBijschrijvingImportValue.Equals("+", StringComparison.InvariantCultureIgnoreCase)) { isBijschrijving = true; } else if (!isBijschrijvingImportValue.Equals("-", StringComparison.InvariantCultureIgnoreCase)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, '{isBijschrijvingImportValue}' is geen geldige waarde voor is bijschrijving."); } var bedragImportValue = importRow[6].Trim(); if (bedragImportValue.Length >= 1) { bedragImportValue = bedragImportValue.Substring(1); } if (!decimal.TryParse(bedragImportValue, NumberStyles.Number, CultureInfo.CurrentCulture, out decimal bedrag)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, '{bedragImportValue}' is geen geldig bedrag."); } var tegenRekeningnummer = importRow[8].Trim(); var tegenRekeningNaam = importRow[9].Trim(); var transactieCode = importRow[13].Trim(); var omschrijvingSb = new StringBuilder(); omschrijvingSb.AppendLine(importRow[19].Trim()); omschrijvingSb.AppendLine(importRow[20].Trim()); omschrijvingSb.AppendLine(importRow[21].Trim()); var omschrijving = omschrijvingSb.ToString().Trim(); var eigenRekening = FindRekeningByRekeningnummer(rekeningen, eigenRekeningnummer); if (eigenRekening == null) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, eigen rekening '{eigenRekeningnummer}' is niet gevonden."); } Rekening tegenRekening = null; if (transactieCode == "kh" || transactieCode == "ga" || transactieCode == "gb") { //Kasafhandeling, Geldautomaat Euro, Geldautomaat VV tegenRekening = instellingen.PortemonneeRekening; if (tegenRekening == null) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, er is geen portemonnee ingesteld."); } } else { (var rekening, var rekeningErrorMessages) = FindOrImportRekening(rekeningen, tegenRekeningnummer, tegenRekeningNaam); tegenRekening = rekening; foreach (var rekeningErrorMessage in rekeningErrorMessages) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {rekeningErrorMessage}"); } } Transactie transactie = null; if (!errorMessages.Any()) { //De waarden zijn succesvol geparsed. Maak de transactie transactie = new Transactie { Datum = datum, Bedrag = bedrag, VanRekening = isBijschrijving ? tegenRekening : eigenRekening, NaarRekening = isBijschrijving ? eigenRekening : tegenRekening, Omschrijving = string.IsNullOrWhiteSpace(omschrijving) ? null : omschrijving }; //Validatie werkt op Id, zet voor nu expliciet (voor o.a. de Unlike validator) transactie.VanRekeningId = transactie.VanRekening.RekeningId; transactie.NaarRekeningId = transactie.NaarRekening.RekeningId; await _transactiesService.DetermineCategorieAsync(transactie); var validationResults = new List <ValidationResult>(); Validator.TryValidateObject(transactie, new ValidationContext(transactie, null, null), validationResults, true); foreach (var validationResult in validationResults) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {validationResult.ErrorMessage}"); } if (importedTransacties.Any(t => t.Datum == transactie.Datum && t.Bedrag == transactie.Bedrag && t.VanRekening == transactie.VanRekening && t.NaarRekening == transactie.NaarRekening && ( (transactie.VanRekening.IsEigenRekening && transactie.NaarRekening.IsEigenRekening) || //Interne boeking. Deze komen dubbel voor in een bestand (t.Omschrijving == transactie.Omschrijving) //Externe boeking. Controleer ook de omschrijving (Betaalverzoeken verschillen vaak alleen op omschrijving) ))) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, er is in dit bestand al een andere transactie op {transactie.Datum:ddd d/M/yyyy} met {transactie.Bedrag:C} van '{transactie.VanRekening.Naam}' naar '{transactie.NaarRekening.Naam}'."); } } if (errorMessages.Any()) { messages.AddRange(errorMessages); } else { messages.AddRange(infoMessages); _transactiesService.Add(transactie); importedTransacties.Add(transactie); } } await _transactiesService.SaveChangesAsync(); return(messages); }
private async Task <List <string> > ImportTransactiesRabobankCsv2013Async(List <List <string> > importRows) { var messages = new List <string>(); //Massa import, laad alle rekeningen en instellingen van te voren in. var rekeningenTask = _rekeningenService.GetListAsync(); var instellingenTask = _instellingenService.GetSingleAsync(); await Task.WhenAll(rekeningenTask, instellingenTask); var rekeningen = rekeningenTask.Result; var instellingen = instellingenTask.Result; var importedTransacties = new List <Transactie>(); for (var rowIndex = 0; rowIndex < importRows.Count; rowIndex++) { var importRow = importRows[rowIndex]; var errorMessages = new List <string>(); var infoMessages = new List <string>(); var eigenRekeningnummer = importRow[0].Trim(); var datumImportValue = importRow[2].Trim(); if (!DateTime.TryParseExact(datumImportValue, "yyyyMMdd", CultureInfo.CurrentCulture, DateTimeStyles.None, out DateTime datum)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, '{datumImportValue}' is geen geldige datum."); } var isBijschrijving = false; var isBijschrijvingImportValue = importRow[3].Trim(); if (isBijschrijvingImportValue.Equals("C", StringComparison.InvariantCultureIgnoreCase)) { isBijschrijving = true; } else if (!isBijschrijvingImportValue.Equals("D", StringComparison.InvariantCultureIgnoreCase)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, '{isBijschrijvingImportValue}' is geen geldige waarde voor is bijschrijving."); } //Bedragen met een punt, gebruik InvariantCulture var bedragImportValue = importRow[4].Trim(); if (!decimal.TryParse(bedragImportValue, NumberStyles.Number, CultureInfo.InvariantCulture, out decimal bedrag)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, '{bedragImportValue}' is geen geldig bedrag."); } var tegenRekeningnummer = importRow[5].Trim(); var tegenRekeningNaam = importRow[6].Trim(); var boekcode = importRow[8].Trim(); var skipOmschrijving1 = false; if (boekcode == "ba" || boekcode == "bc") { //Betaalautomaat, Betalen contactloos //In deze gevallen is er geen tegenrekening, en staat de naam in Omschrijving1 if (tegenRekeningnummer != string.Empty || tegenRekeningNaam != string.Empty) { infoMessages.Add($"Transactie op regel {rowIndex + 1} heeft boekcode '{boekcode}' en zou daarom geen tegen rekeningnummer '{tegenRekeningnummer}' of tegen rekening naam '{tegenRekeningNaam}' moeten hebben. Deze zijn overschreven met omschrijving1."); tegenRekeningnummer = string.Empty; } tegenRekeningNaam = importRow[10].Trim(); skipOmschrijving1 = true; } var omschrijvingSb = new StringBuilder(); if (!skipOmschrijving1) { omschrijvingSb.AppendLine(importRow[10].Trim()); } omschrijvingSb.AppendLine(importRow[11].Trim()); omschrijvingSb.AppendLine(importRow[12].Trim()); omschrijvingSb.AppendLine(importRow[13].Trim()); omschrijvingSb.AppendLine(importRow[14].Trim()); omschrijvingSb.AppendLine(importRow[15].Trim()); var omschrijving = omschrijvingSb.ToString().Trim(); var eigenRekening = FindRekeningByRekeningnummer(rekeningen, eigenRekeningnummer); if (eigenRekening == null) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, eigen rekening '{eigenRekeningnummer}' is niet gevonden."); } Rekening tegenRekening = null; if (boekcode == "kh" || boekcode == "ga" || boekcode == "gb") { //Kasafhandeling, Geldautomaat Euro, Geldautomaat VV tegenRekening = instellingen.PortemonneeRekening; if (tegenRekening == null) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, er is geen portemonnee ingesteld."); } } else { (var rekening, var rekeningErrorMessages) = FindOrImportRekening(rekeningen, tegenRekeningnummer, tegenRekeningNaam); tegenRekening = rekening; foreach (var rekeningErrorMessage in rekeningErrorMessages) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {rekeningErrorMessage}"); } } Transactie transactie = null; if (!errorMessages.Any()) { //De waarden zijn succesvol geparsed. Maak de transactie transactie = new Transactie { Datum = datum, Bedrag = bedrag, VanRekening = isBijschrijving ? tegenRekening : eigenRekening, NaarRekening = isBijschrijving ? eigenRekening : tegenRekening, Omschrijving = string.IsNullOrWhiteSpace(omschrijving) ? null : omschrijving }; //Validatie werkt op Id, zet voor nu expliciet (voor o.a. de Unlike validator) transactie.VanRekeningId = transactie.VanRekening.RekeningId; transactie.NaarRekeningId = transactie.NaarRekening.RekeningId; await _transactiesService.DetermineCategorieAsync(transactie); var validationResults = new List <ValidationResult>(); Validator.TryValidateObject(transactie, new ValidationContext(transactie, null, null), validationResults, true); foreach (var validationResult in validationResults) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, {validationResult.ErrorMessage}"); } if (importedTransacties.Any(t => t.Datum == transactie.Datum && t.Bedrag == transactie.Bedrag && t.VanRekening == transactie.VanRekening && t.NaarRekening == transactie.NaarRekening && t.Omschrijving == transactie.Omschrijving)) { errorMessages.Add($"Transactie op regel {rowIndex + 1} is overgeslagen, er is in dit bestand al een andere transactie op {transactie.Datum:ddd d/M/yyyy} met {transactie.Bedrag:C} van '{transactie.VanRekening.Naam}' naar '{transactie.NaarRekening.Naam}' met omschrijving '{transactie.Omschrijving}'."); } } if (errorMessages.Any()) { messages.AddRange(errorMessages); } else { messages.AddRange(infoMessages); _transactiesService.Add(transactie); importedTransacties.Add(transactie); } } await _transactiesService.SaveChangesAsync(); return(messages); }