Kandis exporter geschrieben

Deckel und Sohlhöhe werden gespeichert
This commit is contained in:
2023-04-19 20:52:02 +02:00
parent 1555e54e82
commit 0877d2b308
16 changed files with 400 additions and 112 deletions

View File

@@ -6,14 +6,16 @@ CREATE TABLE IF NOT EXISTS public.schacht
(
schacht_id integer NOT NULL GENERATED BY DEFAULT AS IDENTITY ( INCREMENT 1 START 1 MINVALUE 1 MAXVALUE 2147483647 CACHE 1 ),
objektbezeichnung text COLLATE pg_catalog."default",
rechtswert numeric(18,4) NOT NULL,
hochwert numeric(18,4) NOT NULL,
sohlhoehe numeric(18,4) NOT NULL,
deckelrechtswert numeric(18,4) NOT NULL,
deckelhochwert numeric(18,4) NOT NULL,
deckelhoehe numeric(18,4) NOT NULL,
sohlrechtswert numeric(18,4),
sohlhochwert numeric(18,4),
sohlhoehe numeric(18,4) NOT NULL,
entwaesserung integer NOT NULL,
ref_projekt_id integer,
CONSTRAINT "PK_Schaechte" PRIMARY KEY (schacht_id),
CONSTRAINT "FK_Schaechte_Projekte_ProjektId" FOREIGN KEY (ref_projekt_id)
CONSTRAINT "PK_schacht" PRIMARY KEY (schacht_id),
CONSTRAINT "FK_schacht_Projekte_ProjektId" FOREIGN KEY (ref_projekt_id)
REFERENCES public.projekt (projekt_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION

View File

@@ -11,33 +11,42 @@ namespace SewerStammGen.ConsoleApp
{
static void Main(string[] args)
{
IProjektDataService projektService = new ProjektDataService("");
Test t = new();
Projekt neuesProjekt = new Projekt()
{
Erstelldatum = "test",
Projektname = "test",
Kodierungssystem = EKodierungssystem.EN13508_2_2011,
ExportType = EExportType.XML2006,
Ort = "test",
Strasse = "test",
};
//test(neuesProjekt, projektService);
readtest(projektService);
Console.WriteLine("Hello, World!");
}
private static async void readtest(IProjektDataService projektService)
{
var m = await projektService.GetAll();
Debugger.Break();
}
}
private static async void test(Projekt neuesProjekt, IProjektDataService projektService)
class Test
{
char[] zeile = new char[1476];
public Test()
{
var m = await projektService.Create(neuesProjekt);
Console.WriteLine(m.Id);
zeile = new char[1476];
for(int i = 0; i < zeile.Length; i++)
{
zeile[i] = ' ';
}
WriteContent(new Tuple<uint, uint>(3, 17), "29283829");
WriteContent(new Tuple<uint, uint>(56, 65), "S");
WriteContent(new Tuple<uint, uint>(67, 76), "IB");
WriteContent(new Tuple<uint, uint>(78, 87), "RESC");
string result = new string(zeile);
}
void WriteContent(Tuple<uint, uint> spalten, string content)
{
uint start = spalten.Item1-1;
uint ende = spalten.Item2-1;
int counter = 0;
for(uint i = start; i < (content.Length+start); i++)
{
zeile[i] = content[counter];
counter++;
}
}
}
}

View File

@@ -17,17 +17,21 @@ namespace SewerStammGen.DAL.Services.PostgresqlData
public async Task<Schacht> Create(Schacht entity)
{
string command = "INSERT INTO " + tableName + " (objektbezeichnung,rechtswert,hochwert,sohlhoehe,deckelhoehe,entwaesserung,ref_projekt_id) VALUES " +
"(@1,@2,@3,@4,@5,@6,@7) RETURNING schacht_id";
string command = "INSERT INTO " + tableName + " (" +
"objektbezeichnung,deckelrechtswert,deckelhochwert," +
"sohlrechtswert,sohlhochwert,sohlhoehe,deckelhoehe,entwaesserung,ref_projekt_id) VALUES " +
"(@1,@2,@3,@4,@5,@6,@7,@8,@9) RETURNING schacht_id";
using(var cmd = new NpgsqlCommand(command,conn))
{
cmd.Parameters.AddWithValue("1", entity.Objektbezeichnung);
cmd.Parameters.AddWithValue("2", entity.RechtsWert);
cmd.Parameters.AddWithValue("3", entity.HochWert);
cmd.Parameters.AddWithValue("4", entity.SohlHoehe);
cmd.Parameters.AddWithValue("5", entity.DeckelHoehe);
cmd.Parameters.AddWithValue("6", (int)entity.Entwaesserung);
cmd.Parameters.AddWithValue("7", entity.Projekt.Id);
cmd.Parameters.AddWithValue("2", entity.DeckelRechtsWert);
cmd.Parameters.AddWithValue("3", entity.DeckelHochWert);
cmd.Parameters.AddWithValue("4", entity.SohlRechtsWert);
cmd.Parameters.AddWithValue("5", entity.SohlHochWert);
cmd.Parameters.AddWithValue("6", entity.SohlHoehe);
cmd.Parameters.AddWithValue("7", entity.DeckelHoehe);
cmd.Parameters.AddWithValue("8", (int)entity.Entwaesserung);
cmd.Parameters.AddWithValue("9", entity.Projekt.Id);
using var reader = await cmd.ExecuteReaderAsync();
reader.Read();
entity.Id = reader.GetInt32(0);
@@ -51,12 +55,14 @@ namespace SewerStammGen.DAL.Services.PostgresqlData
{
Id = reader.GetInt32(0),
Objektbezeichnung = reader.IsDBNull(1) ? "": reader.GetString(1),
RechtsWert = reader.GetDecimal(2),
HochWert = reader.GetDecimal(3),
SohlHoehe = reader.GetDecimal(4),
DeckelHoehe = reader.GetDecimal(5),
Entwaesserung = (EEntwaeserung)reader.GetInt32(6),
Projekt = new Projekt() { Id = reader.GetInt32(7) },
DeckelRechtsWert = reader.GetDecimal(2),
DeckelHochWert = reader.GetDecimal(3),
DeckelHoehe = reader.GetDecimal(4),
SohlRechtsWert = reader.GetDecimal(5),
SohlHochWert = reader.GetDecimal(6),
SohlHoehe = reader.GetDecimal(7),
Entwaesserung = (EEntwaeserung)reader.GetInt32(8),
Projekt = new Projekt() { Id = reader.GetInt32(9) },
};
}
@@ -87,17 +93,20 @@ namespace SewerStammGen.DAL.Services.PostgresqlData
public async Task<Schacht> Update(Schacht entity)
{
string command = @"UPDATE " + tableName + " SET " +
"objektbezeichnung=@1, rechtswert=@2, hochwert=@3, sohlhoehe=@4, deckelhoehe=@5, entwaesserung=@6, ref_projekt_id=@7 WHERE schacht_id=@8";
"objektbezeichnung=@1, deckelrechtswert=@2, deckelhochwert=@3, deckelhoehe=@4, " +
"sohlrechtswert=@5, sohlhochwert=@6, sohlhoehe=@7, entwaesserung=@8, ref_projekt_id=@9 WHERE schacht_id=@10";
using(var cmd = new NpgsqlCommand(command,conn))
{
cmd.Parameters.AddWithValue("1", entity.Objektbezeichnung);
cmd.Parameters.AddWithValue("2", entity.RechtsWert);
cmd.Parameters.AddWithValue("3", entity.HochWert);
cmd.Parameters.AddWithValue("4", entity.SohlHoehe);
cmd.Parameters.AddWithValue("5", entity.DeckelHoehe);
cmd.Parameters.AddWithValue("6", (int)entity.Entwaesserung);
cmd.Parameters.AddWithValue("7", entity.Projekt.Id);
cmd.Parameters.AddWithValue("8", entity.Id);
cmd.Parameters.AddWithValue("2", entity.DeckelRechtsWert);
cmd.Parameters.AddWithValue("3", entity.DeckelHochWert);
cmd.Parameters.AddWithValue("4", entity.DeckelHoehe);
cmd.Parameters.AddWithValue("5", entity.SohlRechtsWert);
cmd.Parameters.AddWithValue("6", entity.SohlHochWert);
cmd.Parameters.AddWithValue("7", entity.SohlHoehe);
cmd.Parameters.AddWithValue("8", (int)entity.Entwaesserung);
cmd.Parameters.AddWithValue("9", entity.Projekt.Id);
cmd.Parameters.AddWithValue("10", entity.Id);
await cmd.ExecuteNonQueryAsync();
}

View File

@@ -10,10 +10,12 @@ namespace SewerStammGen.Shared.Domain
public class Schacht : DBObject
{
public string Objektbezeichnung { get; set; } = String.Empty;
public decimal RechtsWert { get; set; }
public decimal HochWert { get; set; }
public decimal SohlHoehe { get; set; }
public decimal DeckelRechtsWert { get; set; }
public decimal DeckelHochWert { get; set; }
public decimal DeckelHoehe { get; set; }
public decimal SohlRechtsWert { get; set; }
public decimal SohlHochWert { get; set; }
public decimal SohlHoehe { get; set; }
public Projekt Projekt { get; set; } = new Projekt();
public EEntwaeserung Entwaesserung { get; set; }
}

View File

@@ -77,10 +77,10 @@ namespace SewerStammGen.WPF.ViewModel
private void RecalculateLength()
{
double x1 = (double)Model.StartSchacht.RechtsWert;
double x2 = (double)Model.EndSchacht.RechtsWert;
double y1 = (double)Model.StartSchacht.HochWert;
double y2 = (double)Model.EndSchacht.HochWert;
double x1 = (double)Model.StartSchacht.DeckelRechtsWert;
double x2 = (double)Model.EndSchacht.DeckelRechtsWert;
double y1 = (double)Model.StartSchacht.DeckelHochWert;
double y2 = (double)Model.EndSchacht.DeckelHochWert;
double length = Math.Sqrt(((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2)));

View File

@@ -36,25 +36,25 @@ namespace SewerStammGen.WPF.ViewModel
}
}
}
public decimal RechtsWert
public decimal DeckelRechtsWert
{
get => _model.RechtsWert;
get => _model.DeckelRechtsWert;
set
{
if(_model.RechtsWert != value)
if(_model.DeckelRechtsWert != value)
{
_model.RechtsWert = value;
_model.DeckelRechtsWert = value;
OnPropertyChanged();
}
}
}
public decimal HochWert
public decimal DeckelHochWert
{
get => _model.HochWert; set
get => _model.DeckelHochWert; set
{
if (_model.HochWert != value)
if (_model.DeckelHochWert != value)
{
_model.HochWert = value;
_model.DeckelHochWert = value;
OnPropertyChanged();
}
}
@@ -71,6 +71,31 @@ namespace SewerStammGen.WPF.ViewModel
}
}
}
public decimal SohlHochWert
{
get => _model.SohlHochWert;
set
{
if(_model.SohlHochWert != value)
{
_model.SohlHochWert = value;
OnPropertyChanged();
}
}
}
public decimal SohlRechtsWert
{
get => _model.SohlRechtsWert;
set
{
if(_model.SohlRechtsWert != value)
{
_model.SohlRechtsWert = value;
OnPropertyChanged();
}
}
}
public decimal SohlHoehe
{
get => _model.SohlHoehe;

View File

@@ -0,0 +1,24 @@
using SewerStammGen.Shared.Domain;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Data;
namespace SewerStammGen.WPF.Views.Converters
{
public class EqualValueToEntwaesserungConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return value.ToString() == parameter.ToString();
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return (EEntwaeserung)parameter;
}
}
}

View File

@@ -3,9 +3,14 @@
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:converter="clr-namespace:SewerStammGen.WPF.Views.Converters"
xmlns:stat="clr-namespace:SewerStammGen.Shared.Domain;assembly=SewerStammGen.Shared"
xmlns:local="clr-namespace:SewerStammGen.WPF.Views"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.Resources>
<converter:EqualValueToEntwaesserungConverter x:Key="EqualValueToEntwaesserungConverter" />
</UserControl.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
@@ -18,29 +23,37 @@
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition Height="auto" />
<RowDefinition />
</Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0" Content="Bezeichnung" />
<Label Grid.Column="0" Grid.Row="1" Content="Rechtswert" />
<Label Grid.Column="0" Grid.Row="2" Content="Hochwert" />
<Label Grid.Column="0" Grid.Row="3" Content="Sohlhöhe" />
<Label Grid.Column="0" Grid.Row="4" Content="Deckelhöhe" />
<Label Grid.Column="0" Grid.Row="5" Content="Entwässerungsart" />
<Label Grid.Column="0" Grid.Row="1" Content="Deckel Rechtswert" />
<Label Grid.Column="0" Grid.Row="2" Content="Deckel Hochwert" />
<Label Grid.Column="0" Grid.Row="3" Content="Deckel Höhe" />
<Label Grid.Column="0" Grid.Row="4" Content="Sohl Rechtswert" />
<Label Grid.Column="0" Grid.Row="5" Content="Sohl Hochwert" />
<Label Grid.Column="0" Grid.Row="6" Content="Sohl Höhe" />
<!--<Label Grid.Column="0" Grid.Row="7" Content="Deckelhöhe" />-->
<Label Grid.Column="0" Grid.Row="7" Content="Entwässerungsart" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="0" Text="{Binding Objektbezeichnung}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="1" Text="{Binding RechtsWert}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="2" Text="{Binding HochWert}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="3" Text="{Binding SohlHoehe}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="4" Text="{Binding DeckelHoehe}" />
<DockPanel Grid.Column="1" Grid.Row="5">
<RadioButton Style="{StaticResource ToggleButtonList}" Content="Regenwasser" />
<RadioButton Style="{StaticResource ToggleButtonList}" Content="Schmutzwasser" />
<RadioButton Style="{StaticResource ToggleButtonList}" Content="Mischwasser" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="1" Text="{Binding DeckelRechtsWert}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="2" Text="{Binding DeckelHochWert}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="3" Text="{Binding DeckelHoehe}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="4" Text="{Binding SohlRechtsWert}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="5" Text="{Binding SohlHochWert}" />
<TextBox Margin="2" Grid.Column="1" Grid.Row="6" Text="{Binding SohlHoehe}" />
<DockPanel Grid.Column="1" Grid.Row="7">
<RadioButton Style="{StaticResource ToggleButtonList}" Content="Regenwasser" IsChecked="{Binding Entwaeserung, Converter={StaticResource EqualValueToEntwaesserungConverter},ConverterParameter={x:Static stat:EEntwaeserung.Regenwasser}}" />
<RadioButton Style="{StaticResource ToggleButtonList}" Content="Schmutzwasser" IsChecked="{Binding Entwaeserung, Converter={StaticResource EqualValueToEntwaesserungConverter},ConverterParameter={x:Static stat:EEntwaeserung.Schmutzwasser}}" />
<RadioButton Style="{StaticResource ToggleButtonList}" Content="Mischwasser" IsChecked="{Binding Entwaeserung, Converter={StaticResource EqualValueToEntwaesserungConverter},ConverterParameter={x:Static stat:EEntwaeserung.Mischwasser}}" />
</DockPanel>
<StackPanel Grid.ColumnSpan="2" Grid.Row="6">
<StackPanel Grid.ColumnSpan="2" Grid.Row="8">
<Button Content="Speichern" Command="{Binding Speichern}" />
</StackPanel>

View File

@@ -15,10 +15,10 @@
<DataGrid Grid.Row="0" ItemsSource="{Binding Schaechte}" AutoGenerateColumns="False" IsReadOnly="True" SelectionMode="Single" SelectedItem="{Binding SelectedSchacht}">
<DataGrid.Columns>
<DataGridTextColumn Header="Schachtnummer" Binding="{Binding Objektbezeichnung}" />
<DataGridTextColumn Header="Rechtswert" Binding="{Binding RechtsWert}" />
<DataGridTextColumn Header="Hochwert" Binding="{Binding HochWert}" />
<DataGridTextColumn Header="Sohlhöhe" Binding="{Binding SohlHoehe}" />
<DataGridTextColumn Header="Deckelhöhe" Binding="{Binding DeckelHoehe}" />
<!--<DataGridTextColumn Header="Rechtswert" Binding="{Binding RechtsWert}" />-->
<!--<DataGridTextColumn Header="Hochwert" Binding="{Binding HochWert}" />-->
<!--<DataGridTextColumn Header="Sohlhöhe" Binding="{Binding SohlHoehe}" />-->
<!--<DataGridTextColumn Header="Deckelhöhe" Binding="{Binding DeckelHoehe}" />-->
<DataGridTextColumn Header="Entwässerung" Binding="{Binding Entwaesserung}" />
</DataGrid.Columns>
</DataGrid>

View File

@@ -0,0 +1,79 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WWTech_KanalSchnittstelle.Exporter.Kandis
{
public static class ExporterHelper
{
public static Dictionary<string, int> Exporters = new Dictionary<string, int>()
{
{ "KANSCH4.0",557 },
{ "KANSCH6.0",2041 },
{ "KANHAL4.0",530 },
{ "KANHAL6.0",2167 }
};
}
public abstract class KANDIS_Exporter : IDisposable
{
private StreamWriter sw;
char[] zeile;
protected string Zeile => new string(zeile);
public KANDIS_Exporter(string filename, int maxzeilen)
{
sw = new StreamWriter(filename, append: false, Encoding.GetEncoding("ISO-8859-1"));
zeile = new char[1476];
ClearLine();
}
private void ClearLine()
{
for (int i = 0; i < zeile.Length; i++)
{
zeile[i] = ' ';
}
}
protected void WriteLineInFile()
{
sw.WriteLine(Zeile);
sw.Flush();
ClearLine();
}
protected void WriteContent(Tuple<uint, uint> spalten, string content)
{
uint start = spalten.Item1 - 1;
uint ende = spalten.Item2 - 1;
uint length = ende - start;
if(length > content.Length)
{
throw new Exception("Inhalt des Feldes ist zu lang");
}
int counter = 0;
for (uint i = start; i < (content.Length + start); i++)
{
zeile[i] = content[counter];
counter++;
}
}
protected void CloseStream()
{
sw.Close();
}
public void Dispose()
{
sw.Close();
sw.Dispose();
}
}
}

View File

@@ -0,0 +1,38 @@
using SewerStammGen.Shared.Domain;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WWTech_KanalSchnittstelle.Exporter.Kandis
{
public class KANDIS_HALTUNG60 : KANDIS_Exporter
{
public KANDIS_HALTUNG60(string filename, List<Kanal> kanaele) : base(filename, ExporterHelper.Exporters["KANHAL6.0"])
{
foreach(Kanal haltung in kanaele)
{
WriteContent(new Tuple<uint, uint>(3, 17), haltung.StartSchacht.Objektbezeichnung);
WriteContent(new Tuple<uint, uint>(24, 38), haltung.EndSchacht.Objektbezeichnung);
WriteContent(new Tuple<uint, uint>(45, 64), haltung.Objektbezeichnung);
WriteContent(new Tuple<uint, uint>(66, 75), "K"); // Kanalart
WriteContent(new Tuple<uint, uint>(77, 86), "S"); // Entwässerungskennzeichen
WriteContent(new Tuple<uint, uint>(88, 97), "B"); // Betriebzustand
WriteContent(new Tuple<uint, uint>(173, 182), haltung.Material);
WriteContent(new Tuple<uint, uint>(184, 193), "1"); // Profil
WriteContent(new Tuple<uint, uint>(195, 198), haltung.DN.ToString()); // Profilhöhe
WriteContent(new Tuple<uint, uint>(195, 198), haltung.DN.ToString()); // Profilbreite
WriteContent(new Tuple<uint, uint>(227,234), haltung.Haltungslaenge.ToString());
WriteContent(new Tuple<uint, uint>(236, 245), "1"); // Status haltungslänge
WriteContent(new Tuple<uint, uint>(307, 314), ""); // Sohlhöhe AS
WriteContent(new Tuple<uint, uint>(316, 325), "1"); // Status Sohlhöhe AS
WriteContent(new Tuple<uint, uint>(327, 334), ""); // Sohlhöhe ES
WriteContent(new Tuple<uint, uint>(336, 345), "1"); // Status Sohlhöhe ES
WriteContent(new Tuple<uint, uint>(1152, 1161), "Marwede"); // Vermesser
WriteContent(new Tuple<uint, uint>(1257, 1266), "19.04.2023"); // Aufnahmedatum
}
CloseStream();
}
}
}

View File

@@ -0,0 +1,36 @@
using SewerStammGen.Shared.Domain;
namespace WWTech_KanalSchnittstelle.Exporter.Kandis
{
public class KANDIS_SCHACHT60 : KANDIS_Exporter
{
public KANDIS_SCHACHT60(string filename,List<Schacht> schaechte) : base(filename, ExporterHelper.Exporters["KANSCH6.0"])
{
foreach(Schacht schacht in schaechte)
{
WriteContent(new Tuple<uint, uint>(3, 17), schacht.Objektbezeichnung);
WriteContent(new Tuple<uint, uint>(56, 65), "S");
WriteContent(new Tuple<uint, uint>(67, 76), "IB");
WriteContent(new Tuple<uint, uint>(78, 87), "RESC");
WriteContent(new Tuple<uint, uint>(190, 197), schacht.DeckelHoehe.ToString());
WriteContent(new Tuple<uint, uint>(199, 208), "1"); // Status Deckelhöhe
WriteContent(new Tuple<uint, uint>(210, 217), schacht.SohlHoehe.ToString());
WriteContent(new Tuple<uint, uint>(219, 228), "1"); // Status Sohlhöhe
// Schachtmittelpunktkoordinaten
WriteContent(new Tuple<uint, uint>(284, 298), schacht.DeckelRechtsWert.ToString());
WriteContent(new Tuple<uint, uint>(300, 314), schacht.DeckelHochWert.ToString());
WriteContent(new Tuple<uint, uint>(316, 325), "1"); // Status der Schachtmittelpunktkoordinaten
// Deckelkoordinaten
WriteContent(new Tuple<uint, uint>(370, 384), schacht.DeckelRechtsWert.ToString());
WriteContent(new Tuple<uint, uint>(386, 400), schacht.DeckelHochWert.ToString());
WriteContent(new Tuple<uint, uint>(402, 411), "1"); // Status der Deckelkoordinaten
WriteContent(new Tuple<uint, uint>(1222, 1231), "Marwede"); // Vermesser
WriteContent(new Tuple<uint, uint>(1319, 1328), "19.04.2023"); // Aufnahmedatum
WriteLineInFile();
}
CloseStream();
}
}
}

View File

@@ -1,21 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace WWTech_KanalSchnittstelle.Exporter.Kandis
{
public class KANDIS_Stammdaten
{
private string _line;
internal string ToString(int startSpalte, int endSpalte)
{
try
{
string text = _line.Substring(startSpalte - 1, endSpalte - startSpalte + 1);
return text.Trim();
}
}
}
}

View File

@@ -8,6 +8,11 @@ using System.Threading.Tasks;
namespace WWTech_KanalSchnittstelle.Importer
{
internal enum EKennung
{
DECKEL = 1,
SOHLE = 2
}
public class CSVImporter : IImport
{
private string[] input;
@@ -36,15 +41,42 @@ namespace WWTech_KanalSchnittstelle.Importer
zeile++;
if (zeile == 0) continue;
string[] parsed = line.Split(new char[] { ';' });
result.Add(new Schacht()
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)
{
Objektbezeichnung = parsed[0],
RechtsWert = decimal.Parse(parsed[1].Replace('.',',')),
HochWert = decimal.Parse(parsed[2].Replace('.', ',')),
DeckelHoehe = decimal.Parse(parsed[3].Replace('.', ',')),
Projekt = projekt,
Entwaesserung = entwaeserung
});
schacht = new Schacht();
neueSchacht = true;
}
if(kennung == EKennung.DECKEL)
{
schacht.DeckelRechtsWert = decimal.Parse(parsed[1].Replace('.', ','));
schacht.DeckelHochWert = decimal.Parse(parsed[2].Replace('.', ','));
schacht.DeckelHoehe = decimal.Parse(parsed[3].Replace('.', ','));
}
if(kennung == EKennung.SOHLE)
{
schacht.SohlRechtsWert = decimal.Parse(parsed[1].Replace('.', ','));
schacht.SohlHochWert = decimal.Parse(parsed[2].Replace('.', ','));
schacht.SohlHoehe = decimal.Parse(parsed[3].Replace('.', ','));
}
schacht.Projekt = projekt;
schacht.Entwaesserung = entwaeserung;
if (neueSchacht)
{
schacht.Objektbezeichnung = objektname;
result.Add(schacht);
}
}
return result;
}

View File

@@ -0,0 +1,40 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WWTech_KanalSchnittstelle.Exporter.Kandis;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SewerStammGen.Shared.Domain;
namespace WWTech_KanalSchnittstelle.Exporter.Kandis.Tests
{
[TestClass()]
public class KANDIS_SCHACHT60Tests
{
[TestMethod()]
public void KANDIS_SCHACHT60Test()
{
List<Schacht> schaechte = new List<Schacht>()
{
new Schacht()
{
Objektbezeichnung = "15456498",
SohlHoehe = 1457,
DeckelHoehe = 1454,
DeckelRechtsWert = 14,
DeckelHochWert = 14785,
},
new Schacht()
{
Objektbezeichnung = "18656498",
SohlHoehe = 145,
DeckelHoehe = 14,
DeckelRechtsWert = 28,
DeckelHochWert = 14,
}
};
KANDIS_SCHACHT60 kANDIS_SCHACHT60 = new KANDIS_SCHACHT60("test.txt", schaechte);
}
}
}

View File

@@ -15,7 +15,7 @@ namespace WWTech_KanalSchnittstelle.Importer.Tests
public void LoadSchaechteTest()
{
CSVImporter importer = new CSVImporter(1);
var s = importer.LoadSchaechte(@"C:\Users\damia\source\repos\Stammdatengenerator\Beispieldaten\Koordinatendatei.csv");
var s = importer.LoadSchaechte(@"C:\Users\damia\source\repos\Stammdatengenerator\Beispieldaten\Koordinatendatei.csv", SewerStammGen.Shared.Domain.EEntwaeserung.Regenwasser);
}
}
}