From 939f9ca55c76fa525a675a760d0f87655bce7150 Mon Sep 17 00:00:00 2001 From: Maier Stephan SI Date: Wed, 20 Sep 2023 06:13:11 +0200 Subject: [PATCH] Sicherung --- .../Controllers/OrganizationController.cs | 43 ++ .../Controllers/ProjectController.cs | 74 ++-- .../FSI.Prj.Mgt/Data/ApplicationDbContext.cs | 4 + ...20230919061443_addedInitDbSet.Designer.cs} | 49 ++- .../20230919061443_addedInitDbSet.cs | 68 +++ ...919114347_addedOrganizationSet.Designer.cs | 399 ++++++++++++++++++ ...=> 20230919114347_addedOrganizationSet.cs} | 22 +- .../ApplicationDbContextModelSnapshot.cs | 89 ++++ FSI.Prj.Mgt/FSI.Prj.Mgt/FSI.Prj.Mgt.csproj | 1 + .../FSI.Prj.Mgt/Models/Organization.cs | 20 + FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Plant.cs | 25 ++ FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Project.cs | 13 +- FSI.Prj.Mgt/FSI.Prj.Mgt/Models/StatusNew.cs | 8 - .../Views/Organization/Index.cshtml | 17 + .../Views/Project/CreateEdit.cshtml | 7 + .../FSI.Prj.Mgt/Views/Project/Index.cshtml | 6 +- README.md | 13 +- 17 files changed, 802 insertions(+), 56 deletions(-) create mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/OrganizationController.cs rename FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/{20230915114704_addProjectDbSet.Designer.cs => 20230919061443_addedInitDbSet.Designer.cs} (87%) create mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.cs create mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.Designer.cs rename FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/{20230915114704_addProjectDbSet.cs => 20230919114347_addedOrganizationSet.cs} (53%) create mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Organization.cs create mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Plant.cs delete mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Models/StatusNew.cs create mode 100644 FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Organization/Index.cshtml diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/OrganizationController.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/OrganizationController.cs new file mode 100644 index 0000000..6027939 --- /dev/null +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/OrganizationController.cs @@ -0,0 +1,43 @@ +using FSI.Prj.Mgt.Data; +using FSI.Prj.Mgt.Models; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using X.PagedList; + +namespace FSI.Prj.Mgt.Controllers +{ + public class OrganizationController : Controller + { + private readonly ApplicationDbContext _context; + + public OrganizationController(ApplicationDbContext context) + { + _context = context; + } + + public IActionResult Index() + { + + var organizations = _context.Organizations.ToList(); + + var org = organizations.Where(x => x.ParentId == 0 || x.ParentId == null).FirstOrDefault(); + + SetChildren(org, organizations); + + return View(org); + } + + private void SetChildren(Organization model, List organizations) + { + var childs = organizations.Where(x => x.ParentId == model.Id).ToList(); + + foreach (var item in childs) + { + SetChildren(item, organizations); + model.Childs.Add(item); + } + } + + + } +} \ No newline at end of file diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/ProjectController.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/ProjectController.cs index 7f08137..6e3590d 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/ProjectController.cs +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Controllers/ProjectController.cs @@ -1,6 +1,7 @@ using FSI.Prj.Mgt.Data; using FSI.Prj.Mgt.Models; using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; using X.PagedList; namespace FSI.Prj.Mgt.Controllers @@ -16,18 +17,23 @@ namespace FSI.Prj.Mgt.Controllers public async Task Index(string searchString, int? page) { - var allProjects = from project in _context.Projects select project ; + + IQueryable projects = _context.Projects.Include(x => x.Plant); + if (!string.IsNullOrEmpty(searchString)) { - allProjects = allProjects.Where(x => x.No!.ToString().Contains(searchString) || x.Name!.Contains(searchString)|| x.Description!.Contains(searchString)); + projects = projects.Where(x => x.No!.ToString().Contains(searchString) || x.Name!.Contains(searchString) || x.Description!.Contains(searchString)); + } - return View(await allProjects.ToPagedListAsync(page ?? 1, 10)); + return View(await projects.ToPagedListAsync(page ?? 1, 10)); } public IActionResult CreateEdit(int id) { + ViewBag.Plants = _context.Plants; + if (id == 0) { return View(); @@ -54,49 +60,47 @@ namespace FSI.Prj.Mgt.Controllers // Description = i.ToString(), // }; - if (project.Id == 0) + if (project.Id == 0) + { + var highestPrjNo = 0; + int prjYear = 0; + int prjNo = 0; + + if (_context.Projects.Count() > 0) { - var highestPrjNo = 0; - int prjYear = 0; - int prjNo = 0; + highestPrjNo = _context.Projects.Max(x => x.No); + prjYear = highestPrjNo; - if (_context.Projects.Count() > 0) - { - highestPrjNo = _context.Projects.Max(x => x.No); - prjYear = highestPrjNo; + // Projekt Jahr freistellen + while (prjYear >= 100) + prjYear /= 10; - // Projekt Jahr freistellen - while (prjYear >= 100) - prjYear /= 10; + // Laufende Nr. des Jahres freistellen + prjNo = highestPrjNo >= 1000 ? highestPrjNo % 1000 : highestPrjNo; + } - // Laufende Nr. des Jahres freistellen - prjNo = highestPrjNo >= 1000 ? highestPrjNo % 1000 : highestPrjNo; - } - - // Neue Projekt Nummer berechnen - if (prjYear == int.Parse(DateTime.Now.ToString("yy"))) - { - project.No = prjYear * 1000 + prjNo + 1; - } - else - { - project.No = int.Parse(DateTime.Now.ToString("yy")) * 1000 + 1; - } - - _context.Projects.Add(project); + // Neue Projekt Nummer berechnen + if (prjYear == int.Parse(DateTime.Now.ToString("yy"))) + { + project.No = prjYear * 1000 + prjNo + 1; } else { - _context.Projects.Update(project); - + project.No = int.Parse(DateTime.Now.ToString("yy")) * 1000 + 1; } + + _context.Projects.Add(project); + } + else + { + _context.Projects.Update(project); + + } //} - _context.SaveChanges(); + _context.SaveChanges(); - - - return RedirectToAction("Index"); + return RedirectToAction("Index"); } public IActionResult DeleteProject(int id) diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/ApplicationDbContext.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/ApplicationDbContext.cs index 25004b9..e4a4730 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/ApplicationDbContext.cs +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/ApplicationDbContext.cs @@ -9,6 +9,10 @@ namespace FSI.Prj.Mgt.Data public DbSet Projects { get; set; } + public DbSet Plants { get; set; } + + public DbSet Organizations { get; set; } + public ApplicationDbContext(DbContextOptions options) : base(options) { diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230915114704_addProjectDbSet.Designer.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.Designer.cs similarity index 87% rename from FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230915114704_addProjectDbSet.Designer.cs rename to FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.Designer.cs index 04b7c65..7093a88 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230915114704_addProjectDbSet.Designer.cs +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.Designer.cs @@ -12,8 +12,8 @@ using Microsoft.EntityFrameworkCore.Storage.ValueConversion; namespace FSI.Prj.Mgt.Data.Migrations { [DbContext(typeof(ApplicationDbContext))] - [Migration("20230915114704_addProjectDbSet")] - partial class addProjectDbSet + [Migration("20230919061443_addedInitDbSet")] + partial class addedInitDbSet { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -25,6 +25,35 @@ namespace FSI.Prj.Mgt.Data.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + modelBuilder.Entity("FSI.Prj.Mgt.Models.Plant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubPlantName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubPlantShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Plants"); + }); + modelBuilder.Entity("FSI.Prj.Mgt.Models.Project", b => { b.Property("Id") @@ -44,11 +73,16 @@ namespace FSI.Prj.Mgt.Data.Migrations b.Property("No") .HasColumnType("int"); + b.Property("PlantId") + .HasColumnType("int"); + b.Property("Status") .HasColumnType("int"); b.HasKey("Id"); + b.HasIndex("PlantId"); + b.ToTable("Projects"); }); @@ -254,6 +288,17 @@ namespace FSI.Prj.Mgt.Data.Migrations b.ToTable("AspNetUserTokens", (string)null); }); + modelBuilder.Entity("FSI.Prj.Mgt.Models.Project", b => + { + b.HasOne("FSI.Prj.Mgt.Models.Plant", "Plant") + .WithMany() + .HasForeignKey("PlantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Plant"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.cs new file mode 100644 index 0000000..625df72 --- /dev/null +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919061443_addedInitDbSet.cs @@ -0,0 +1,68 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace FSI.Prj.Mgt.Data.Migrations +{ + /// + public partial class addedInitDbSet : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Plants", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ShortName = table.Column(type: "nvarchar(max)", nullable: false), + Name = table.Column(type: "nvarchar(max)", nullable: false), + SubPlantShortName = table.Column(type: "nvarchar(max)", nullable: false), + SubPlantName = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Plants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "Projects", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + No = table.Column(type: "int", nullable: false), + PlantId = table.Column(type: "int", nullable: false), + Name = table.Column(type: "nvarchar(max)", nullable: false), + Description = table.Column(type: "nvarchar(max)", nullable: false), + Status = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Projects", x => x.Id); + table.ForeignKey( + name: "FK_Projects_Plants_PlantId", + column: x => x.PlantId, + principalTable: "Plants", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Projects_PlantId", + table: "Projects", + column: "PlantId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Projects"); + + migrationBuilder.DropTable( + name: "Plants"); + } + } +} diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.Designer.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.Designer.cs new file mode 100644 index 0000000..532011b --- /dev/null +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.Designer.cs @@ -0,0 +1,399 @@ +// +using System; +using FSI.Prj.Mgt.Data; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace FSI.Prj.Mgt.Data.Migrations +{ + [DbContext(typeof(ApplicationDbContext))] + [Migration("20230919114347_addedOrganizationSet")] + partial class addedOrganizationSet + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.11") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Organization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentId") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Plant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubPlantName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubPlantShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Plants"); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Project", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("No") + .HasColumnType("int"); + + b.Property("PlantId") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("PlantId"); + + b.ToTable("Projects"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("AspNetRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetRoleClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("AspNetUsers", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserClaims", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("nvarchar(450)"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("AspNetUserLogins", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("RoleId") + .HasColumnType("nvarchar(450)"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("AspNetUserRoles", (string)null); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("nvarchar(450)"); + + b.Property("LoginProvider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AspNetUserTokens", (string)null); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Organization", b => + { + b.HasOne("FSI.Prj.Mgt.Models.Organization", "Parent") + .WithMany("Childs") + .HasForeignKey("ParentId"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Project", b => + { + b.HasOne("FSI.Prj.Mgt.Models.Plant", "Plant") + .WithMany() + .HasForeignKey("PlantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Plant"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityUser", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Organization", b => + { + b.Navigation("Childs"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230915114704_addProjectDbSet.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.cs similarity index 53% rename from FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230915114704_addProjectDbSet.cs rename to FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.cs index d3f902a..dec7d51 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230915114704_addProjectDbSet.cs +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/20230919114347_addedOrganizationSet.cs @@ -5,33 +5,43 @@ namespace FSI.Prj.Mgt.Data.Migrations { /// - public partial class addProjectDbSet : Migration + public partial class addedOrganizationSet : Migration { /// protected override void Up(MigrationBuilder migrationBuilder) { migrationBuilder.CreateTable( - name: "Projects", + name: "Organizations", columns: table => new { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - No = table.Column(type: "int", nullable: false), Name = table.Column(type: "nvarchar(max)", nullable: false), + ShortName = table.Column(type: "nvarchar(max)", nullable: false), Description = table.Column(type: "nvarchar(max)", nullable: false), - Status = table.Column(type: "int", nullable: false) + ParentId = table.Column(type: "int", nullable: true) }, constraints: table => { - table.PrimaryKey("PK_Projects", x => x.Id); + table.PrimaryKey("PK_Organizations", x => x.Id); + table.ForeignKey( + name: "FK_Organizations_Organizations_ParentId", + column: x => x.ParentId, + principalTable: "Organizations", + principalColumn: "Id"); }); + + migrationBuilder.CreateIndex( + name: "IX_Organizations_ParentId", + table: "Organizations", + column: "ParentId"); } /// protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.DropTable( - name: "Projects"); + name: "Organizations"); } } } diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/ApplicationDbContextModelSnapshot.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/ApplicationDbContextModelSnapshot.cs index b8db121..a0f9f28 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/ApplicationDbContextModelSnapshot.cs +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Data/Migrations/ApplicationDbContextModelSnapshot.cs @@ -22,6 +22,65 @@ namespace FSI.Prj.Mgt.Data.Migrations SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + modelBuilder.Entity("FSI.Prj.Mgt.Models.Organization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ParentId") + .HasColumnType("int"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ParentId"); + + b.ToTable("Organizations"); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Plant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Name") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("ShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubPlantName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SubPlantShortName") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Plants"); + }); + modelBuilder.Entity("FSI.Prj.Mgt.Models.Project", b => { b.Property("Id") @@ -41,11 +100,16 @@ namespace FSI.Prj.Mgt.Data.Migrations b.Property("No") .HasColumnType("int"); + b.Property("PlantId") + .HasColumnType("int"); + b.Property("Status") .HasColumnType("int"); b.HasKey("Id"); + b.HasIndex("PlantId"); + b.ToTable("Projects"); }); @@ -251,6 +315,26 @@ namespace FSI.Prj.Mgt.Data.Migrations b.ToTable("AspNetUserTokens", (string)null); }); + modelBuilder.Entity("FSI.Prj.Mgt.Models.Organization", b => + { + b.HasOne("FSI.Prj.Mgt.Models.Organization", "Parent") + .WithMany("Childs") + .HasForeignKey("ParentId"); + + b.Navigation("Parent"); + }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Project", b => + { + b.HasOne("FSI.Prj.Mgt.Models.Plant", "Plant") + .WithMany() + .HasForeignKey("PlantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Plant"); + }); + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => { b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) @@ -301,6 +385,11 @@ namespace FSI.Prj.Mgt.Data.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); }); + + modelBuilder.Entity("FSI.Prj.Mgt.Models.Organization", b => + { + b.Navigation("Childs"); + }); #pragma warning restore 612, 618 } } diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/FSI.Prj.Mgt.csproj b/FSI.Prj.Mgt/FSI.Prj.Mgt/FSI.Prj.Mgt.csproj index cbaebed..5e9f409 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/FSI.Prj.Mgt.csproj +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/FSI.Prj.Mgt.csproj @@ -8,6 +8,7 @@ + diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Organization.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Organization.cs new file mode 100644 index 0000000..629bd84 --- /dev/null +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Organization.cs @@ -0,0 +1,20 @@ +using System.ComponentModel.DataAnnotations.Schema; + +namespace FSI.Prj.Mgt.Models +{ + public class Organization + { + public int Id { get; set; } + + public string Name { get; set; } + + public string ShortName { get; set; } + + public string Description { get; set; } + + public int? ParentId { get; set; } + [ForeignKey("ParentId")] + public virtual Organization Parent { get; set; } + public virtual ICollection Childs { get; set; } + } +} diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Plant.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Plant.cs new file mode 100644 index 0000000..7ac239f --- /dev/null +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Plant.cs @@ -0,0 +1,25 @@ +using System.Runtime.CompilerServices; + +namespace FSI.Prj.Mgt.Models +{ + public class Plant + { + public int Id { get; set; } + + public string ShortName { get; set; } + + public string Name { get; set; } + + public string SubPlantShortName { get; set; } + + public string SubPlantName { get; set; } + + public string OutSh + { + get + { + return ShortName + " " + SubPlantShortName; + } + } + } +} diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Project.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Project.cs index 0f96ddd..e3cfdc3 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Project.cs +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/Project.cs @@ -6,23 +6,30 @@ namespace FSI.Prj.Mgt.Models public class Project { public int Id { get; set; } + public int No{ get; set; } + + [ForeignKey(nameof(Plant))] + public int PlantId { get; set; } + public virtual Plant Plant { get; set; } + public string Name { get; set; } + public string Description { get; set; } + public ProjectStatus Status { get; set; } - [ForeignKey(nameof(StatusId))] - public virtual StatusNew StatusNew { get; set; } } public enum ProjectStatus { [Display(Name = "in Bearbeitung")] started, + [Display(Name = "beendet")] ended, + [Display(Name = "zurückgestellt")] shelved, - } } diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/StatusNew.cs b/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/StatusNew.cs deleted file mode 100644 index 9e7a060..0000000 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Models/StatusNew.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace FSI.Prj.Mgt.Models -{ - public class StatusNew - { - public int Id { get; set; } - public string Name { get; set; } - } -} diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Organization/Index.cshtml b/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Organization/Index.cshtml new file mode 100644 index 0000000..14741e3 --- /dev/null +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Organization/Index.cshtml @@ -0,0 +1,17 @@ +@model FSI.Prj.Mgt.Models.Organization + + +
+
    +
  • + @Model.Name + @Html.Partial("Childrens", Model) +
  • +
+
+ + \ No newline at end of file diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/CreateEdit.cshtml b/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/CreateEdit.cshtml index a4714dc..6a99d1c 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/CreateEdit.cshtml +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/CreateEdit.cshtml @@ -4,6 +4,7 @@ @model FSI.Prj.Mgt.Models.Project +
@@ -25,6 +26,12 @@
+
+
+ +
+
+
diff --git a/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/Index.cshtml b/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/Index.cshtml index 67721cc..46bb483 100644 --- a/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/Index.cshtml +++ b/FSI.Prj.Mgt/FSI.Prj.Mgt/Views/Project/Index.cshtml @@ -19,7 +19,7 @@

- Suchen nach: + Suchen nach:

@@ -31,6 +31,7 @@ Id Nr. + Anlage Name Bezeichnung Status @@ -49,6 +50,9 @@ @project.No + + @project.Plant.Name @project.Plant.SubPlantShortName + @project.Name diff --git a/README.md b/README.md index 2c1be8d..2d81c1b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,14 @@ # FSI.Prj.Mgt -Projektverwaltungstool \ No newline at end of file +Projektverwaltungstool + + +## Befehle +Migration erstellen + - add-migration addedXXXDbSet + +Änderungen auf DB ausrollen + - update-database + +DB löschen/leeren + - update-database 0 \ No newline at end of file