diff --git a/SewerStammGen.EntityFramework/Migrations/20230331095322_SchachtRefProject.Designer.cs b/SewerStammGen.EntityFramework/Migrations/20230331095322_SchachtRefProject.Designer.cs
new file mode 100644
index 0000000..abf2545
--- /dev/null
+++ b/SewerStammGen.EntityFramework/Migrations/20230331095322_SchachtRefProject.Designer.cs
@@ -0,0 +1,222 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using SewerStammGen.EntityFramework;
+
+#nullable disable
+
+namespace SewerStammGen.EntityFramework.Migrations
+{
+ [DbContext(typeof(SewerStammGenDbContext))]
+ [Migration("20230331095322_SchachtRefProject")]
+ partial class SchachtRefProject
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.4")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Shared.Domain.Auftraggeber", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Ansprechpartner")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .HasColumnType("text");
+
+ b.Property("Ort")
+ .HasColumnType("text");
+
+ b.Property("Postleitzahl")
+ .HasColumnType("text");
+
+ b.Property("Strasse")
+ .HasColumnType("text");
+
+ b.Property("Telefonnummer")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Auftraggebers");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Kanal", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DN")
+ .HasColumnType("integer");
+
+ b.Property("EndSchachtId")
+ .HasColumnType("integer");
+
+ b.Property("Entwaesserung")
+ .HasColumnType("integer");
+
+ b.Property("Haltungslaenge")
+ .HasColumnType("numeric");
+
+ b.Property("Material")
+ .HasColumnType("text");
+
+ b.Property("Objektbezeichnung")
+ .HasColumnType("text");
+
+ b.Property("ProjektId")
+ .HasColumnType("integer");
+
+ b.Property("StartSchachtId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EndSchachtId");
+
+ b.HasIndex("ProjektId");
+
+ b.HasIndex("StartSchachtId");
+
+ b.ToTable("Kanaele");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Projekt", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AuftraggeberId")
+ .HasColumnType("integer");
+
+ b.Property("Erstelldatum")
+ .HasColumnType("text");
+
+ b.Property("ExportType")
+ .HasColumnType("integer");
+
+ b.Property("Kodierungssystem")
+ .HasColumnType("integer");
+
+ b.Property("Ort")
+ .HasColumnType("text");
+
+ b.Property("Projektname")
+ .HasColumnType("text");
+
+ b.Property("Strasse")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuftraggeberId");
+
+ b.ToTable("Projekte");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Schacht", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DeckelHoehe")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("Entwaesserung")
+ .HasColumnType("integer");
+
+ b.Property("HochWert")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("Objektbezeichnung")
+ .HasColumnType("text");
+
+ b.Property("ProjektId")
+ .HasColumnType("integer");
+
+ b.Property("RechtsWert")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("SohlHoehe")
+ .HasColumnType("decimal(18,4)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProjektId");
+
+ b.ToTable("Schaechte");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Kanal", b =>
+ {
+ b.HasOne("Shared.Domain.Schacht", "EndSchacht")
+ .WithMany()
+ .HasForeignKey("EndSchachtId");
+
+ b.HasOne("Shared.Domain.Projekt", null)
+ .WithMany("Kanaele")
+ .HasForeignKey("ProjektId");
+
+ b.HasOne("Shared.Domain.Schacht", "StartSchacht")
+ .WithMany()
+ .HasForeignKey("StartSchachtId");
+
+ b.Navigation("EndSchacht");
+
+ b.Navigation("StartSchacht");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Projekt", b =>
+ {
+ b.HasOne("Shared.Domain.Auftraggeber", "Auftraggeber")
+ .WithMany()
+ .HasForeignKey("AuftraggeberId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Auftraggeber");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Schacht", b =>
+ {
+ b.HasOne("Shared.Domain.Projekt", "Projekt")
+ .WithMany("Schaechte")
+ .HasForeignKey("ProjektId");
+
+ b.Navigation("Projekt");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Projekt", b =>
+ {
+ b.Navigation("Kanaele");
+
+ b.Navigation("Schaechte");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/SewerStammGen.EntityFramework/Migrations/20230331095322_SchachtRefProject.cs b/SewerStammGen.EntityFramework/Migrations/20230331095322_SchachtRefProject.cs
new file mode 100644
index 0000000..1c358b0
--- /dev/null
+++ b/SewerStammGen.EntityFramework/Migrations/20230331095322_SchachtRefProject.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace SewerStammGen.EntityFramework.Migrations
+{
+ ///
+ public partial class SchachtRefProject : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+
+ }
+ }
+}
diff --git a/SewerStammGen.EntityFramework/Migrations/20230331121831_SchachtRefProjectVirtual.Designer.cs b/SewerStammGen.EntityFramework/Migrations/20230331121831_SchachtRefProjectVirtual.Designer.cs
new file mode 100644
index 0000000..8e84c7e
--- /dev/null
+++ b/SewerStammGen.EntityFramework/Migrations/20230331121831_SchachtRefProjectVirtual.Designer.cs
@@ -0,0 +1,222 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using SewerStammGen.EntityFramework;
+
+#nullable disable
+
+namespace SewerStammGen.EntityFramework.Migrations
+{
+ [DbContext(typeof(SewerStammGenDbContext))]
+ [Migration("20230331121831_SchachtRefProjectVirtual")]
+ partial class SchachtRefProjectVirtual
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.4")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Shared.Domain.Auftraggeber", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("Ansprechpartner")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .HasColumnType("text");
+
+ b.Property("Ort")
+ .HasColumnType("text");
+
+ b.Property("Postleitzahl")
+ .HasColumnType("text");
+
+ b.Property("Strasse")
+ .HasColumnType("text");
+
+ b.Property("Telefonnummer")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Auftraggebers");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Kanal", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DN")
+ .HasColumnType("integer");
+
+ b.Property("EndSchachtId")
+ .HasColumnType("integer");
+
+ b.Property("Entwaesserung")
+ .HasColumnType("integer");
+
+ b.Property("Haltungslaenge")
+ .HasColumnType("numeric");
+
+ b.Property("Material")
+ .HasColumnType("text");
+
+ b.Property("Objektbezeichnung")
+ .HasColumnType("text");
+
+ b.Property("ProjektId")
+ .HasColumnType("integer");
+
+ b.Property("StartSchachtId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("EndSchachtId");
+
+ b.HasIndex("ProjektId");
+
+ b.HasIndex("StartSchachtId");
+
+ b.ToTable("Kanaele");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Projekt", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AuftraggeberId")
+ .HasColumnType("integer");
+
+ b.Property("Erstelldatum")
+ .HasColumnType("text");
+
+ b.Property("ExportType")
+ .HasColumnType("integer");
+
+ b.Property("Kodierungssystem")
+ .HasColumnType("integer");
+
+ b.Property("Ort")
+ .HasColumnType("text");
+
+ b.Property("Projektname")
+ .HasColumnType("text");
+
+ b.Property("Strasse")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AuftraggeberId");
+
+ b.ToTable("Projekte");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Schacht", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("DeckelHoehe")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("Entwaesserung")
+ .HasColumnType("integer");
+
+ b.Property("HochWert")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("Objektbezeichnung")
+ .HasColumnType("text");
+
+ b.Property("ProjektId")
+ .HasColumnType("integer");
+
+ b.Property("RechtsWert")
+ .HasColumnType("decimal(18,4)");
+
+ b.Property("SohlHoehe")
+ .HasColumnType("decimal(18,4)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ProjektId");
+
+ b.ToTable("Schaechte");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Kanal", b =>
+ {
+ b.HasOne("Shared.Domain.Schacht", "EndSchacht")
+ .WithMany()
+ .HasForeignKey("EndSchachtId");
+
+ b.HasOne("Shared.Domain.Projekt", null)
+ .WithMany("Kanaele")
+ .HasForeignKey("ProjektId");
+
+ b.HasOne("Shared.Domain.Schacht", "StartSchacht")
+ .WithMany()
+ .HasForeignKey("StartSchachtId");
+
+ b.Navigation("EndSchacht");
+
+ b.Navigation("StartSchacht");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Projekt", b =>
+ {
+ b.HasOne("Shared.Domain.Auftraggeber", "Auftraggeber")
+ .WithMany()
+ .HasForeignKey("AuftraggeberId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Auftraggeber");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Schacht", b =>
+ {
+ b.HasOne("Shared.Domain.Projekt", "Projekt")
+ .WithMany("Schaechte")
+ .HasForeignKey("ProjektId");
+
+ b.Navigation("Projekt");
+ });
+
+ modelBuilder.Entity("Shared.Domain.Projekt", b =>
+ {
+ b.Navigation("Kanaele");
+
+ b.Navigation("Schaechte");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/SewerStammGen.EntityFramework/Migrations/20230331121831_SchachtRefProjectVirtual.cs b/SewerStammGen.EntityFramework/Migrations/20230331121831_SchachtRefProjectVirtual.cs
new file mode 100644
index 0000000..8f56abf
--- /dev/null
+++ b/SewerStammGen.EntityFramework/Migrations/20230331121831_SchachtRefProjectVirtual.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace SewerStammGen.EntityFramework.Migrations
+{
+ ///
+ public partial class SchachtRefProjectVirtual : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+
+ }
+ }
+}
diff --git a/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs b/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs
index f90d818..9b2d27c 100644
--- a/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs
+++ b/SewerStammGen.EntityFramework/Migrations/SewerStammGenDbContextModelSnapshot.cs
@@ -200,9 +200,11 @@ namespace SewerStammGen.EntityFramework.Migrations
modelBuilder.Entity("Shared.Domain.Schacht", b =>
{
- b.HasOne("Shared.Domain.Projekt", null)
+ b.HasOne("Shared.Domain.Projekt", "Projekt")
.WithMany("Schaechte")
.HasForeignKey("ProjektId");
+
+ b.Navigation("Projekt");
});
modelBuilder.Entity("Shared.Domain.Projekt", b =>
diff --git a/SewerStammGen.EntityFramework/Services/SchachtDataService.cs b/SewerStammGen.EntityFramework/Services/SchachtDataService.cs
new file mode 100644
index 0000000..43cbc1a
--- /dev/null
+++ b/SewerStammGen.EntityFramework/Services/SchachtDataService.cs
@@ -0,0 +1,63 @@
+using Microsoft.EntityFrameworkCore;
+using SewerStammGen.EntityFramework.Services.Common;
+using SewerStammGen.Shared.Contracts;
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.EntityFramework.Services
+{
+ public class SchachtDataService : ISchachtDataService
+ {
+ private readonly SewerStammGenDbContextFactory _contextFactory;
+ private readonly NonQueryDataService _nonQueryDataService;
+
+ public SchachtDataService(SewerStammGenDbContextFactory contextFactory)
+ {
+ _contextFactory = contextFactory;
+ _nonQueryDataService = new NonQueryDataService(contextFactory);
+ }
+
+ public async Task Create(Schacht entity)
+ {
+ return await _nonQueryDataService.Create(entity);
+ }
+
+ public Schacht CreateNonAsync(Schacht entity)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task Delete(int id)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task Get(int id)
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task> GetAll(int projektID)
+ {
+ using (SewerStammGenDbContext context = _contextFactory.CreateDbContext())
+ {
+ IEnumerable entities = await context.Set().Where(x => x.Projekt.Id.Equals(projektID)).ToListAsync();
+ return entities;
+ }
+ }
+
+ public Task> GetAll()
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task Update(int id, Schacht entity)
+ {
+ return await _nonQueryDataService.Update(id, entity);
+ }
+ }
+}
diff --git a/SewerStammGen/Commands/SchachtAddCommand.cs b/SewerStammGen/Commands/SchachtAddCommand.cs
new file mode 100644
index 0000000..70011c7
--- /dev/null
+++ b/SewerStammGen/Commands/SchachtAddCommand.cs
@@ -0,0 +1,46 @@
+using SewerStammGen.Shared.Contracts;
+using SewerStammGen.WPF.Interface.Navigator;
+using SewerStammGen.WPF.ViewModel.State;
+using Shared.Contracts;
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.WPF.Commands
+{
+ class SchachtAddCommand : AsyncCommandBase
+ {
+ private readonly ISchachtDataService schachtDataService;
+ private readonly IActualState actualState;
+ private readonly IRenavigator renavigator;
+ private readonly IDataService projektService;
+ private readonly ISchachtService schachtService;
+
+
+ public SchachtAddCommand(ISchachtDataService schachtDataService,IDataService projektService, IActualState actualState, IRenavigator renavigator, ISchachtService schachtService)
+ {
+ this.schachtDataService = schachtDataService;
+ this.actualState = actualState;
+ this.renavigator = renavigator;
+ this.projektService = projektService;
+ this.schachtService = schachtService;
+ }
+
+ public override async Task ExecuteAsync(object? parameter)
+ {
+ /*var d = await projektService.Get(actualState.ProjektID);
+ Schacht newSchacht = new Schacht();
+ newSchacht.Projekt = d;
+ newSchacht.Objektbezeichnung = "test";
+
+ await schachtDataService.Create(newSchacht);
+ */
+ Projekt aktuelleProjekt = await projektService.Get(actualState.ProjektID);
+ Schacht schacht = await schachtService.CreateSchacht(aktuelleProjekt);
+
+ }
+ }
+}
diff --git a/SewerStammGen/Commands/SchachtDeleteCommand.cs b/SewerStammGen/Commands/SchachtDeleteCommand.cs
new file mode 100644
index 0000000..71ad7ec
--- /dev/null
+++ b/SewerStammGen/Commands/SchachtDeleteCommand.cs
@@ -0,0 +1,33 @@
+using SewerStammGen.Shared.Contracts;
+using SewerStammGen.WPF.Interface.Navigator;
+using SewerStammGen.WPF.ViewModel;
+using SewerStammGen.WPF.ViewModel.State;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.WPF.Commands
+{
+ class SchachtDeleteCommand : AsyncCommandBase
+ {
+ private ISchachtDataService schachtService;
+ private IActualState actualState;
+ private IRenavigator renavigator;
+ private ManholeListViewModel manholeListViewModel;
+
+ public SchachtDeleteCommand(ISchachtDataService schachtService, IActualState actualState, IRenavigator renavigator, ManholeListViewModel manholeListViewModel)
+ {
+ this.schachtService = schachtService;
+ this.actualState = actualState;
+ this.renavigator = renavigator;
+ this.manholeListViewModel = manholeListViewModel;
+ }
+
+ public override Task ExecuteAsync(object? parameter)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/SewerStammGen/Commands/SchachtEditCommand.cs b/SewerStammGen/Commands/SchachtEditCommand.cs
new file mode 100644
index 0000000..b2ac011
--- /dev/null
+++ b/SewerStammGen/Commands/SchachtEditCommand.cs
@@ -0,0 +1,33 @@
+using SewerStammGen.Shared.Contracts;
+using SewerStammGen.WPF.Interface.Navigator;
+using SewerStammGen.WPF.ViewModel;
+using SewerStammGen.WPF.ViewModel.State;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.WPF.Commands
+{
+ class SchachtEditCommand : AsyncCommandBase
+ {
+ private ISchachtDataService schachtService;
+ private IActualState actualState;
+ private IRenavigator renavigator;
+ private ManholeListViewModel manholeListViewModel;
+
+ public SchachtEditCommand(ISchachtDataService schachtService, IActualState actualState, IRenavigator renavigator, ManholeListViewModel manholeListViewModel)
+ {
+ this.schachtService = schachtService;
+ this.actualState = actualState;
+ this.renavigator = renavigator;
+ this.manholeListViewModel = manholeListViewModel;
+ }
+
+ public override Task ExecuteAsync(object? parameter)
+ {
+ throw new NotImplementedException();
+ }
+ }
+}
diff --git a/SewerStammGen/Enum/EMainWindowViewType.cs b/SewerStammGen/Enum/EMainWindowViewType.cs
index 56996d1..abefca7 100644
--- a/SewerStammGen/Enum/EMainWindowViewType.cs
+++ b/SewerStammGen/Enum/EMainWindowViewType.cs
@@ -9,8 +9,9 @@ namespace SewerStammGen.Enum
public enum EMainWindowViewType
{
Home,
- ProjectsList,
- EditSchacht,
+ ProjectList,
+ SchachtList,
+ SchachtEdit,
SewerConnectionEdit
}
}
diff --git a/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs b/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs
index c0ebc8e..0359317 100644
--- a/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs
+++ b/SewerStammGen/HostBuilders/AddServicesHostBuilderExtensions.cs
@@ -1,6 +1,8 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using SewerStammGen.EntityFramework.Services;
+using SewerStammGen.Shared.Contracts;
+using SewerStammGen.Shared.Services;
using SewerStammGen.WPF.Interface.Navigator;
using SewerStammGen.WPF.ViewModel;
using SewerStammGen.WPF.ViewModel.State.Navigation;
@@ -24,6 +26,8 @@ namespace SewerStammGen.HostBuilders
services.AddSingleton();
services.AddSingleton>();
services.AddSingleton, GenericDataService>();
+ services.AddSingleton();
+ services.AddSingleton();
});
return host;
}
diff --git a/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs b/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs
index 0bc966a..403fbc5 100644
--- a/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs
+++ b/SewerStammGen/HostBuilders/AddViewModelsHostBuilderExtensions.cs
@@ -14,6 +14,7 @@ using System.Net.Security;
using System.Text;
using System.Threading.Tasks;
using SewerStammGen.WPF.ViewModel.State;
+using SewerStammGen.Shared.Contracts;
namespace SewerStammGen.HostBuilders
{
@@ -29,21 +30,38 @@ namespace SewerStammGen.HostBuilders
services.AddSingleton>();
services.AddSingleton>();
+ services.AddSingleton>();
+ services.AddSingleton>();
+
services.AddSingleton>(services =>
{
return () => new HomeViewModel();
});
- services.AddSingleton>(services =>
+ #region Schächte
+ services.AddSingleton>(services =>
{
- return () => new EditManHoleViewModel();
+ return () => new ManholeListViewModel(
+ services.GetRequiredService(),
+ services.GetRequiredService>(),
+ services.GetRequiredService>(),
+ services.GetRequiredService(),
+ services.GetRequiredService()
+ );
});
+ services.AddSingleton>(services =>
+ {
+ return () => new ManholeEditViewModel();
+ });
+ #endregion
+
services.AddSingleton>(services =>
{
return () => new SewerConnectorViewModel();
});
+ #region Projekte
services.AddSingleton>(services =>
{
return () => new ProjektEditViewModel(
@@ -61,6 +79,7 @@ namespace SewerStammGen.HostBuilders
services.GetRequiredService()
);
});
+ #endregion
services.AddSingleton();
});
diff --git a/SewerStammGen/MainWindow.xaml b/SewerStammGen/MainWindow.xaml
index 2ab9e10..44431ce 100644
--- a/SewerStammGen/MainWindow.xaml
+++ b/SewerStammGen/MainWindow.xaml
@@ -16,7 +16,10 @@
-
+
+
+
+
diff --git a/SewerStammGen/SewerStammGen.WPF.csproj.user b/SewerStammGen/SewerStammGen.WPF.csproj.user
index 5a0dffe..96277f6 100644
--- a/SewerStammGen/SewerStammGen.WPF.csproj.user
+++ b/SewerStammGen/SewerStammGen.WPF.csproj.user
@@ -13,10 +13,13 @@
Code
-
+
Code
-
+
+ Code
+
+
Code
@@ -39,10 +42,13 @@
Designer
-
+
Designer
-
+
+ Designer
+
+
Designer
diff --git a/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs b/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs
index a0b9dab..9444c4f 100644
--- a/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs
+++ b/SewerStammGen/ViewModel/Factories/MainWindowViewModelFactory.cs
@@ -11,37 +11,38 @@ namespace SewerStammGen.WPF.ViewModel.Factories
public class MainWindowViewModelFactory : IViewModelAbstractFactory
{
private CreateViewModel _createHomeViewModel;
- private CreateViewModel _createEditManholeViewModel;
+ private CreateViewModel _createManholeEditViewModel;
+ private CreateViewModel _createManholeListViewModel;
private CreateViewModel _createSewerConnectorViewModel;
private CreateViewModel _createProjektListViewModel;
public MainWindowViewModelFactory(
CreateViewModel createHomeViewModel,
- CreateViewModel createEditManholeViewModel,
+ CreateViewModel createManholeEditViewModel,
+ CreateViewModel createManholeListViewModel,
CreateViewModel createSewerConnectorViewModel,
CreateViewModel createProjektListViewModel
)
{
_createHomeViewModel = createHomeViewModel;
- _createEditManholeViewModel = createEditManholeViewModel;
+ _createManholeEditViewModel = createManholeEditViewModel;
_createSewerConnectorViewModel = createSewerConnectorViewModel;
_createProjektListViewModel = createProjektListViewModel;
+ _createManholeListViewModel = createManholeListViewModel;
}
public BaseViewModel CreateViewModel(EMainWindowViewType viewType)
{
switch(viewType)
{
- case EMainWindowViewType.Home:
- return _createHomeViewModel();
+ case EMainWindowViewType.Home: return _createHomeViewModel();
- case EMainWindowViewType.EditSchacht:
- return _createEditManholeViewModel();
+ case EMainWindowViewType.SchachtList: return _createManholeListViewModel();
+ case EMainWindowViewType.SchachtEdit: return _createManholeEditViewModel();
- case EMainWindowViewType.SewerConnectionEdit:
- return _createSewerConnectorViewModel();
+ case EMainWindowViewType.SewerConnectionEdit: return _createSewerConnectorViewModel();
- case EMainWindowViewType.ProjectsList: return _createProjektListViewModel();
+ case EMainWindowViewType.ProjectList: return _createProjektListViewModel();
default:
throw new NotImplementedException();
diff --git a/SewerStammGen/ViewModel/MainWindowViewModel.cs b/SewerStammGen/ViewModel/MainWindowViewModel.cs
index 4797ab2..d50324d 100644
--- a/SewerStammGen/ViewModel/MainWindowViewModel.cs
+++ b/SewerStammGen/ViewModel/MainWindowViewModel.cs
@@ -45,6 +45,12 @@ namespace SewerStammGen.WPF.ViewModel
Navigator.StateChanged += Navigator_StateChanged;
+
+
+
+#if DEBUG
+ _actualState.ProjektID = 5;
+#endif
}
private void ActualState_ProjektChanged(object? sender, EventArgs e)
diff --git a/SewerStammGen/ViewModel/EditManHoleViewModel.cs b/SewerStammGen/ViewModel/ManholeEditViewModel.cs
similarity index 76%
rename from SewerStammGen/ViewModel/EditManHoleViewModel.cs
rename to SewerStammGen/ViewModel/ManholeEditViewModel.cs
index 409b528..5fff1c1 100644
--- a/SewerStammGen/ViewModel/EditManHoleViewModel.cs
+++ b/SewerStammGen/ViewModel/ManholeEditViewModel.cs
@@ -6,7 +6,7 @@ using System.Threading.Tasks;
namespace SewerStammGen.WPF.ViewModel
{
- public class EditManHoleViewModel : BaseViewModel
+ public class ManholeEditViewModel : BaseViewModel
{
}
}
diff --git a/SewerStammGen/ViewModel/Schacht/ManholeListViewModel.cs b/SewerStammGen/ViewModel/Schacht/ManholeListViewModel.cs
new file mode 100644
index 0000000..fda91dd
--- /dev/null
+++ b/SewerStammGen/ViewModel/Schacht/ManholeListViewModel.cs
@@ -0,0 +1,60 @@
+using SewerStammGen.Shared.Contracts;
+using SewerStammGen.WPF.Commands;
+using SewerStammGen.WPF.Interface.Navigator;
+using SewerStammGen.WPF.ViewModel.State;
+using Shared.Contracts;
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Input;
+
+namespace SewerStammGen.WPF.ViewModel
+{
+ public class ManholeListViewModel : BaseViewModel
+ {
+ private ISchachtDataService _schachtService;
+ private readonly ObservableCollection _schaechte;
+ private readonly IActualState _actualState;
+ private readonly ISchachtService _schachtServicer;
+ public ObservableCollection Schaechte { get => _schaechte; }
+
+ public ICommand AddSchachtCommand { get; set; }
+ public ICommand EditSchachtCommand { get; set; }
+ public ICommand DeleteSchachtCommand { get; set; }
+
+
+ public ManholeListViewModel(ISchachtDataService schachtService, IDataService projektService,IRenavigator renavigator ,IActualState actualState, ISchachtService schachtServicer)
+ {
+ _schachtService = schachtService;
+ _actualState = actualState;
+
+ _schaechte = new ObservableCollection();
+ _schachtServicer = schachtServicer;
+
+ AddSchachtCommand = new SchachtAddCommand(schachtService,projektService, actualState,renavigator,schachtServicer);
+ EditSchachtCommand = new SchachtEditCommand(schachtService, actualState, renavigator,this);
+ DeleteSchachtCommand = new SchachtDeleteCommand(schachtService, actualState, renavigator, this);
+
+ LoadSchaechte();
+ }
+
+ private async void LoadSchaechte()
+ {
+ var schaechte = await _schachtService.GetAll(_actualState.ProjektID);
+ InitCollection(_schaechte, schaechte);
+ }
+
+ private void InitCollection(ObservableCollection dest, IEnumerable source)
+ {
+ dest.Clear();
+ foreach(var i in source)
+ {
+ dest.Add(i);
+ }
+ }
+ }
+}
diff --git a/SewerStammGen/ViewModel/State/ActualState.cs b/SewerStammGen/ViewModel/State/ActualState.cs
index 70f1cfb..24a407f 100644
--- a/SewerStammGen/ViewModel/State/ActualState.cs
+++ b/SewerStammGen/ViewModel/State/ActualState.cs
@@ -9,7 +9,8 @@ namespace SewerStammGen.WPF.ViewModel.State
{
internal class ActualState : IActualState
{
- public int ProjektID { get; private set; }
+ // TODO: set auf private set setzen
+ public int ProjektID { get; set; }
public void SetProjekt(Projekt projekt, bool notification = true)
{
diff --git a/SewerStammGen/ViewModel/State/IActualState.cs b/SewerStammGen/ViewModel/State/IActualState.cs
index 7b77e8b..57665a3 100644
--- a/SewerStammGen/ViewModel/State/IActualState.cs
+++ b/SewerStammGen/ViewModel/State/IActualState.cs
@@ -10,8 +10,8 @@ namespace SewerStammGen.WPF.ViewModel.State
public interface IActualState
{
event EventHandler? ProjektChanged;
-
- int ProjektID { get; }
+ // TODO: ProjektID set entfernen!
+ int ProjektID { get; set; }
void SetProjekt(Projekt projekt, bool notification = true);
}
diff --git a/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml b/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml
index 82dc03a..592ccf0 100644
--- a/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml
+++ b/SewerStammGen/Views/Controls/UCMainWindowNavigationBar.xaml
@@ -16,8 +16,8 @@
-
-
+
+
diff --git a/SewerStammGen/Views/Projekte/ProjektEditView.xaml b/SewerStammGen/Views/Projekt/ProjektEditView.xaml
similarity index 100%
rename from SewerStammGen/Views/Projekte/ProjektEditView.xaml
rename to SewerStammGen/Views/Projekt/ProjektEditView.xaml
diff --git a/SewerStammGen/Views/Projekte/ProjektEditView.xaml.cs b/SewerStammGen/Views/Projekt/ProjektEditView.xaml.cs
similarity index 100%
rename from SewerStammGen/Views/Projekte/ProjektEditView.xaml.cs
rename to SewerStammGen/Views/Projekt/ProjektEditView.xaml.cs
diff --git a/SewerStammGen/Views/Projekte/ProjektListView.xaml b/SewerStammGen/Views/Projekt/ProjektListView.xaml
similarity index 88%
rename from SewerStammGen/Views/Projekte/ProjektListView.xaml
rename to SewerStammGen/Views/Projekt/ProjektListView.xaml
index 49016f1..4aac793 100644
--- a/SewerStammGen/Views/Projekte/ProjektListView.xaml
+++ b/SewerStammGen/Views/Projekt/ProjektListView.xaml
@@ -8,7 +8,7 @@
d:DesignHeight="450" d:DesignWidth="800">
-
+
diff --git a/SewerStammGen/Views/Projekte/ProjektListView.xaml.cs b/SewerStammGen/Views/Projekt/ProjektListView.xaml.cs
similarity index 100%
rename from SewerStammGen/Views/Projekte/ProjektListView.xaml.cs
rename to SewerStammGen/Views/Projekt/ProjektListView.xaml.cs
diff --git a/SewerStammGen/Views/Schacht/SchachtListView.xaml b/SewerStammGen/Views/Schacht/SchachtListView.xaml
new file mode 100644
index 0000000..29edeb2
--- /dev/null
+++ b/SewerStammGen/Views/Schacht/SchachtListView.xaml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/SewerStammGen/Views/Schacht/SchachtListView.xaml.cs b/SewerStammGen/Views/Schacht/SchachtListView.xaml.cs
new file mode 100644
index 0000000..66526eb
--- /dev/null
+++ b/SewerStammGen/Views/Schacht/SchachtListView.xaml.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows;
+using System.Windows.Controls;
+using System.Windows.Data;
+using System.Windows.Documents;
+using System.Windows.Input;
+using System.Windows.Media;
+using System.Windows.Media.Imaging;
+using System.Windows.Navigation;
+using System.Windows.Shapes;
+
+namespace SewerStammGen.WPF.Views
+{
+ ///
+ /// Interaktionslogik für SchachtList.xaml
+ ///
+ public partial class SchachtListView : UserControl
+ {
+ public SchachtListView()
+ {
+ InitializeComponent();
+ }
+ }
+}
diff --git a/Shared/Contracts/IProjektDataService.cs b/Shared/Contracts/IProjektDataService.cs
new file mode 100644
index 0000000..14dfb36
--- /dev/null
+++ b/Shared/Contracts/IProjektDataService.cs
@@ -0,0 +1,14 @@
+using Shared.Contracts;
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.Shared.Contracts
+{
+ public interface IProjektDataService : IDataService
+ {
+ }
+}
diff --git a/Shared/Contracts/ISchachtDataService.cs b/Shared/Contracts/ISchachtDataService.cs
new file mode 100644
index 0000000..abe9777
--- /dev/null
+++ b/Shared/Contracts/ISchachtDataService.cs
@@ -0,0 +1,15 @@
+using Shared.Contracts;
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.Shared.Contracts
+{
+ public interface ISchachtDataService : IDataService
+ {
+ Task> GetAll(int projektID);
+ }
+}
diff --git a/Shared/Contracts/ISchachtService.cs b/Shared/Contracts/ISchachtService.cs
new file mode 100644
index 0000000..ee56d13
--- /dev/null
+++ b/Shared/Contracts/ISchachtService.cs
@@ -0,0 +1,14 @@
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.Shared.Contracts
+{
+ public interface ISchachtService
+ {
+ Task CreateSchacht(Projekt proj);
+ }
+}
diff --git a/Shared/Domain/Projekt.cs b/Shared/Domain/Projekt.cs
index e51957d..3f7b149 100644
--- a/Shared/Domain/Projekt.cs
+++ b/Shared/Domain/Projekt.cs
@@ -16,7 +16,7 @@ namespace Shared.Domain
public Auftraggeber Auftraggeber { get; set; }
public EExportType ExportType { get; set; }
public EKodierungssystem Kodierungssystem { get; set; }
- public IList Kanaele { get; set; }
- public IList Schaechte { get; set;}
+ public IList Kanaele { get; set; } = new List();
+ public IList Schaechte { get; set;} = new List();
}
}
diff --git a/Shared/Domain/Schacht.cs b/Shared/Domain/Schacht.cs
index 7aa298b..51392c5 100644
--- a/Shared/Domain/Schacht.cs
+++ b/Shared/Domain/Schacht.cs
@@ -9,7 +9,7 @@ namespace Shared.Domain
{
public class Schacht : DBObject
{
- public string? Objektbezeichnung { get; set; }
+ public string? Objektbezeichnung { get; set; }
[Column(TypeName = "decimal(18,4)")]
public decimal RechtsWert { get; set; }
@@ -22,6 +22,8 @@ namespace Shared.Domain
[Column(TypeName = "decimal(18,4)")]
public decimal DeckelHoehe { get; set; }
+
+ public virtual Projekt? Projekt { get; set; }
public EEntwaeserung Entwaesserung { get; set; }
}
diff --git a/Shared/Services/SchachtService.cs b/Shared/Services/SchachtService.cs
new file mode 100644
index 0000000..4deea60
--- /dev/null
+++ b/Shared/Services/SchachtService.cs
@@ -0,0 +1,31 @@
+using SewerStammGen.Shared.Contracts;
+using Shared.Contracts;
+using Shared.Domain;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace SewerStammGen.Shared.Services
+{
+ public class SchachtService : ISchachtService
+ {
+ private readonly IDataService _projectService;
+
+ public SchachtService(IDataService projectService)
+ {
+ _projectService = projectService;
+ }
+
+ public async Task CreateSchacht(Projekt proj)
+ {
+ Schacht schacht = new Schacht() {
+ Projekt = proj
+ };
+ proj.Schaechte.Add(schacht);
+ await _projectService.Update(proj.Id, proj);
+ return schacht;
+ }
+ }
+}