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 @@ + + + + + + + + + + + + + +