using SewerStammGen.Shared.Domain; using SewerStammGen.Shared.Enum; using Shared.Contracts; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace WWTech_KanalSchnittstelle.Importer { internal enum EKennung { DECKEL = 1, SOHLE = 2 } public class CSVImporter : IImport { private string[]? input; private readonly Projekt projekt; public CSVImporter(int projektID) { projekt = new Projekt() { Id = projektID }; } private decimal parseKoordinate(string input) { decimal result = 0m; input = string.Format("{0:0.000}", input).Replace('.', ','); if(!decimal.TryParse(input, out result)) { throw new Exception("Konnte koordinate nicht parsen"); } return result; } public List LoadSchaechte(string filename, string vermesser) { List result = new List(); Dictionary entwaesserungKennung = new Dictionary() { { "1100", EEntwaeserung.Schmutzwasser }, { "1200", EEntwaeserung.Mischwasser }, { "1300", EEntwaeserung.Regenwasser }, { "3110", EEntwaeserung.Schmutzwasser }, { "3210", EEntwaeserung.Mischwasser }, { "3310", EEntwaeserung.Regenwasser } }; Dictionary schachtKennung = new Dictionary() { { "1100", ESchachtType.Hauptkanal }, { "1200", ESchachtType.Hauptkanal }, { "1300", ESchachtType.Hauptkanal }, { "3110", ESchachtType.Revisionschacht }, { "3210", ESchachtType.Revisionschacht }, { "3310", ESchachtType.Revisionschacht } }; if (!File.Exists(filename)) { throw new FileNotFoundException(filename); } input = File.ReadAllLines(filename); int zeile = -1; foreach (string line in input) { zeile++; if (zeile == 0) continue; string[] parsed = line.Split(new char[] { ';' }); string objektbezeichnung = parsed[0]; string objektname = objektbezeichnung.Substring(0, objektbezeichnung.Length - 2); EKennung kennung = (EKennung)Convert.ToInt32(objektbezeichnung.Substring(objektbezeichnung.Length - 2, 2)); bool neueSchacht = false; Schacht? schacht = result.FindLast(x => x.Objektbezeichnung.Equals(objektname) && x.Projekt.Id.Equals(projekt.Id)); if (schacht == null) { schacht = new Schacht(); neueSchacht = true; } if(kennung == EKennung.DECKEL) { schacht.DeckelRechtsWert = parseKoordinate(parsed[1]); schacht.DeckelHochWert = parseKoordinate(parsed[2]); schacht.DeckelHoehe = parseKoordinate(parsed[3]); } if(kennung == EKennung.SOHLE) { schacht.SohlRechtsWert = parseKoordinate(parsed[1]); schacht.SohlHochWert = parseKoordinate(parsed[2]); schacht.SohlHoehe = parseKoordinate(parsed[3]); } if (parsed.Length >= 4) { schacht.Entwaesserung = entwaesserungKennung[parsed[4]]; schacht.SchachtType = schachtKennung[parsed[4]]; } else { schacht.Entwaesserung = EEntwaeserung.Schmutzwasser; schacht.SchachtType = ESchachtType.Hauptkanal; } schacht.Projekt = projekt; schacht.Vermesser = vermesser; schacht.AufnahmeDatum = DateTime.Now.ToShortDateString(); if (neueSchacht) { schacht.Objektbezeichnung = objektname; result.Add(schacht); } } return result; } } }