فهرست منبع

Anpassung DB-Model + Gewerke

Arne Diekmann 5 سال پیش
والد
کامیت
b79bdb9bed
38فایلهای تغییر یافته به همراه3165 افزوده شده و 8 حذف شده
  1. 5 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftEmployee.cs
  2. 6 1
      GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftMaterial.cs
  3. 5 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Customer.cs
  4. 5 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Material.cs
  5. 48 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Title.cs
  6. 12 0
      GreenTree.Strohrmann.ERP.Domain/GreenTree.Strohrmann.ERP.Domain.csproj
  7. 631 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200721120025_Calculation.Designer.cs
  8. 43 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200721120025_Calculation.cs
  9. 636 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200721121705_Packaging.Designer.cs
  10. 23 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200721121705_Packaging.cs
  11. 724 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200721132516_Titles.Designer.cs
  12. 80 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200721132516_Titles.cs
  13. 106 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/ERPDbContextModelSnapshot.cs
  14. 3 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftEmployeeMapping.cs
  15. 4 1
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftMaterialMapping.cs
  16. 5 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CustomerMapping.cs
  17. 4 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/MaterialMapping.cs
  18. 38 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/TitleMapping.cs
  19. 1 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/UnitMapping.cs
  20. 6 0
      GreenTree.Strohrmann.ERP.Domain/Model/ERPDbContext.cs
  21. 145 0
      GreenTree.Strohrmann.ERP.Web/Controllers/CraftController.cs
  22. 15 0
      GreenTree.Strohrmann.ERP.Web/Controllers/CustomerController.cs
  23. 14 4
      GreenTree.Strohrmann.ERP.Web/Controllers/MaterialController.cs
  24. 81 0
      GreenTree.Strohrmann.ERP.Web/Models/Business/CraftEmployeeModel.cs
  25. 81 0
      GreenTree.Strohrmann.ERP.Web/Models/Business/CraftMaterialModel.cs
  26. 81 0
      GreenTree.Strohrmann.ERP.Web/Models/Business/CraftModel.cs
  27. 19 0
      GreenTree.Strohrmann.ERP.Web/Models/Business/CustomerModel.cs
  28. 8 1
      GreenTree.Strohrmann.ERP.Web/Models/Business/MaterialModel.cs
  29. 60 0
      GreenTree.Strohrmann.ERP.Web/Models/Business/TitleModel.cs
  30. 83 0
      GreenTree.Strohrmann.ERP.Web/Views/Craft/Create.cshtml
  31. 133 0
      GreenTree.Strohrmann.ERP.Web/Views/Craft/Index.cshtml
  32. 23 0
      GreenTree.Strohrmann.ERP.Web/Views/Craft/_CraftEmployeePartial.cshtml
  33. 7 0
      GreenTree.Strohrmann.ERP.Web/Views/Customer/Create.cshtml
  34. 6 0
      GreenTree.Strohrmann.ERP.Web/Views/Customer/Details.cshtml
  35. 7 0
      GreenTree.Strohrmann.ERP.Web/Views/Customer/Edit.cshtml
  36. 5 0
      GreenTree.Strohrmann.ERP.Web/Views/Material/Create.cshtml
  37. 6 0
      GreenTree.Strohrmann.ERP.Web/Views/Material/Details.cshtml
  38. 6 1
      GreenTree.Strohrmann.ERP.Web/Views/Material/Edit.cshtml

+ 5 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftEmployee.cs

@@ -30,5 +30,10 @@ namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
         /// The amount of employee working hours
         /// </summary>
         public decimal Amount { get; set; }
+
+        /// <summary>
+        /// The value of the employee working hours
+        /// </summary>
+        public decimal Value { get; set; }
     }
 }

+ 6 - 1
GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftMaterial.cs

@@ -27,8 +27,13 @@ namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
         public virtual Material Material { get; set; }
 
         /// <summary>
-        /// The amount of employee working hours
+        /// The amount of the material
         /// </summary>
         public decimal Amount { get; set; }
+
+        /// <summary>
+        /// The material calculation factor
+        /// </summary>
+        public decimal CalculationFactor { get; set; }
     }
 }

+ 5 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Customer.cs

@@ -12,6 +12,11 @@ namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
         /// </summary>
         public int Id { get; set; }
 
+        /// <summary>
+        /// Customer title
+        /// </summary>
+        public virtual Title Title { get; set; }
+
         /// <summary>
         /// Customer forename
         /// </summary>

+ 5 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Material.cs

@@ -52,6 +52,11 @@ namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
         /// </summary>
         public virtual Unit DefaultUnit { get; set; }
 
+        /// <summary>
+        /// The amount of items per package
+        /// </summary>
+        public decimal PackageSize { get; set; }
+
         /// <summary>
         /// Material supplier
         /// </summary>

+ 48 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Title.cs

@@ -0,0 +1,48 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Title
+    {
+        #region Properties
+
+        /// <summary>
+        /// Title id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Title name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Tax customers
+        /// </summary>
+        public virtual ICollection<Customer> Customers { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the Title class
+        /// </summary>
+        public Title() { }
+
+        /// <summary>
+        /// Initializes a new instance of the Title class
+        /// </summary>
+        /// <param name="id">The id.</param>
+        /// <param name="name">The name.</param>
+        public Title(int id, string name)
+        {
+            Id = id;
+            Name = name;
+        }
+
+        #endregion
+    }
+}

+ 12 - 0
GreenTree.Strohrmann.ERP.Domain/GreenTree.Strohrmann.ERP.Domain.csproj

@@ -9,6 +9,18 @@
     <Compile Remove="Migrations\20200614195012_InitialCreate.Designer.cs" />
     <Compile Remove="Migrations\20200615110555_UserActivation.cs" />
     <Compile Remove="Migrations\20200615110555_UserActivation.Designer.cs" />
+    <Compile Remove="Migrations\20200721115022_Calculation.cs" />
+    <Compile Remove="Migrations\20200721115022_Calculation.Designer.cs" />
+    <Compile Remove="Migrations\20200721125217_Titles.cs" />
+    <Compile Remove="Migrations\20200721125217_Titles.Designer.cs" />
+    <Compile Remove="Migrations\20200721125659_Titles.cs" />
+    <Compile Remove="Migrations\20200721125659_Titles.Designer.cs" />
+    <Compile Remove="Migrations\20200721130734_Titles.cs" />
+    <Compile Remove="Migrations\20200721130734_Titles.Designer.cs" />
+    <Compile Remove="Migrations\20200721130913_Titles.cs" />
+    <Compile Remove="Migrations\20200721130913_Titles.Designer.cs" />
+    <Compile Remove="Migrations\20200721131229_Titles.cs" />
+    <Compile Remove="Migrations\20200721131229_Titles.Designer.cs" />
   </ItemGroup>
 
   <ItemGroup>

+ 631 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200721120025_Calculation.Designer.cs

@@ -0,0 +1,631 @@
+// <auto-generated />
+using System;
+using GreenTree.Strohrmann.ERP.Domain.Model;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    [DbContext(typeof(ERPDbContext))]
+    [Migration("20200721120025_Calculation")]
+    partial class Calculation
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "3.1.5")
+                .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<DateTime>("CreationDate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("CustomerId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomerId");
+
+                    b.ToTable("Crafts");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftEmployee", b =>
+                {
+                    b.Property<int>("CraftId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("EmployeeId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("CraftId", "EmployeeId");
+
+                    b.HasIndex("EmployeeId");
+
+                    b.ToTable("CraftEmployees");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftMaterial", b =>
+                {
+                    b.Property<int>("CraftId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("MaterialId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("CalculationFactor")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("CraftId", "MaterialId");
+
+                    b.HasIndex("MaterialId");
+
+                    b.ToTable("CraftMaterials");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CompanyName")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<bool>("IsBusiness")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false);
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<int?>("TaxId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Town")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ZipCode")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaxId");
+
+                    b.ToTable("Customers");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("Birthdate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("EmployeeDegreeId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailAddress")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EmployeeDegreeId");
+
+                    b.ToTable("Employees");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.EmployeeDegree", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<int>("Order")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("EmployeeDegrees");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Meister",
+                            Order = 3,
+                            Value = 60m
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Geselle",
+                            Order = 2,
+                            Value = 30m
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Name = "Aushilfe",
+                            Order = 1,
+                            Value = 15m
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("DefaultUnitId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Depth")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("Height")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<string>("ItemNumber")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("NetValue")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<int>("SupplierId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Width")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DefaultUnitId");
+
+                    b.HasIndex("SupplierId");
+
+                    b.ToTable("Materials");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Supplier", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Comment")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailFirst")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailSecond")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("PhoneFirst")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("PhoneSecond")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Town")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ZipCode")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Suppliers");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Tax", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ShortName")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Taxes");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Deutschland Umsatzsteuer",
+                            ShortName = "Umst. (19%)",
+                            Value = 0.19m
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Deutschland Umsatzsteuer 2020",
+                            ShortName = "Umst. (16%) 2020",
+                            Value = 0.16m
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ShortName")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Units");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 8,
+                            Description = "Angabe in Einheit Milimeter",
+                            Name = "Milimeter",
+                            ShortName = "mm"
+                        },
+                        new
+                        {
+                            Id = 1,
+                            Description = "Angabe in Einheit Meter",
+                            Name = "Meter",
+                            ShortName = "m"
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Description = "Angabe in Einheit Quadratmeter",
+                            Name = "Quadratmeter",
+                            ShortName = "m²"
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Description = "Angabe in Einheit Kubikmeter",
+                            Name = "Kubikmeter",
+                            ShortName = "m³"
+                        },
+                        new
+                        {
+                            Id = 4,
+                            Description = "Angabe in Einheit Liter",
+                            Name = "Liter",
+                            ShortName = "l"
+                        },
+                        new
+                        {
+                            Id = 5,
+                            Description = "Angabe in Stückzahl",
+                            Name = "Stück",
+                            ShortName = "Stck."
+                        },
+                        new
+                        {
+                            Id = 6,
+                            Description = "Angabe in Stückzahl",
+                            Name = "Kilogramm",
+                            ShortName = "Kg"
+                        },
+                        new
+                        {
+                            Id = 7,
+                            Description = "Angabe in Zeitstunden",
+                            Name = "Stunden",
+                            ShortName = "Std."
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.Policy", b =>
+                {
+                    b.Property<string>("Name")
+                        .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+                    b.HasKey("Name");
+
+                    b.ToTable("Policies");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Accountname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<bool?>("Activated")
+                        .IsRequired()
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(true);
+
+                    b.Property<DateTime?>("Birthdate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Forename")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailAddress")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.UserPolicy", b =>
+                {
+                    b.Property<int>("UserId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("PolicyName")
+                        .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+                    b.HasKey("UserId", "PolicyName");
+
+                    b.ToTable("UserPolicies");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", "Customer")
+                        .WithMany("Crafts")
+                        .HasForeignKey("CustomerId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftEmployee", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", "Craft")
+                        .WithMany("CraftEmployees")
+                        .HasForeignKey("CraftId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", "Employee")
+                        .WithMany()
+                        .HasForeignKey("EmployeeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftMaterial", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", "Craft")
+                        .WithMany("CraftMaterials")
+                        .HasForeignKey("CraftId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", "Material")
+                        .WithMany()
+                        .HasForeignKey("MaterialId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Tax", "Tax")
+                        .WithMany("Customers")
+                        .HasForeignKey("TaxId")
+                        .OnDelete(DeleteBehavior.Restrict);
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.EmployeeDegree", "EmployeeDegree")
+                        .WithMany("Employees")
+                        .HasForeignKey("EmployeeDegreeId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", "DefaultUnit")
+                        .WithMany("Materials")
+                        .HasForeignKey("DefaultUnitId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Supplier", "Supplier")
+                        .WithMany("Materials")
+                        .HasForeignKey("SupplierId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.UserPolicy", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Rights.User", "User")
+                        .WithMany("Policies")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}

+ 43 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200721120025_Calculation.cs

@@ -0,0 +1,43 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    public partial class Calculation : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<decimal>(
+                name: "CalculationFactor",
+                table: "CraftMaterials",
+                nullable: false,
+                defaultValue: 0m);
+
+            migrationBuilder.AddColumn<decimal>(
+                name: "Value",
+                table: "CraftEmployees",
+                nullable: false,
+                defaultValue: 0m);
+
+            migrationBuilder.InsertData(
+                table: "Units",
+                columns: new[] { "Id", "Description", "Name", "ShortName" },
+                values: new object[] { 8, "Angabe in Einheit Milimeter", "Milimeter", "mm" });
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DeleteData(
+                table: "Units",
+                keyColumn: "Id",
+                keyValue: 8);
+
+            migrationBuilder.DropColumn(
+                name: "CalculationFactor",
+                table: "CraftMaterials");
+
+            migrationBuilder.DropColumn(
+                name: "Value",
+                table: "CraftEmployees");
+        }
+    }
+}

+ 636 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200721121705_Packaging.Designer.cs

@@ -0,0 +1,636 @@
+// <auto-generated />
+using System;
+using GreenTree.Strohrmann.ERP.Domain.Model;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    [DbContext(typeof(ERPDbContext))]
+    [Migration("20200721121705_Packaging")]
+    partial class Packaging
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "3.1.5")
+                .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<DateTime>("CreationDate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("CustomerId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomerId");
+
+                    b.ToTable("Crafts");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftEmployee", b =>
+                {
+                    b.Property<int>("CraftId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("EmployeeId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("CraftId", "EmployeeId");
+
+                    b.HasIndex("EmployeeId");
+
+                    b.ToTable("CraftEmployees");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftMaterial", b =>
+                {
+                    b.Property<int>("CraftId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("MaterialId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("CalculationFactor")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("CraftId", "MaterialId");
+
+                    b.HasIndex("MaterialId");
+
+                    b.ToTable("CraftMaterials");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CompanyName")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<bool>("IsBusiness")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false);
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<int?>("TaxId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Town")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ZipCode")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaxId");
+
+                    b.ToTable("Customers");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("Birthdate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("EmployeeDegreeId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailAddress")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EmployeeDegreeId");
+
+                    b.ToTable("Employees");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.EmployeeDegree", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<int>("Order")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("EmployeeDegrees");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Meister",
+                            Order = 3,
+                            Value = 60m
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Geselle",
+                            Order = 2,
+                            Value = 30m
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Name = "Aushilfe",
+                            Order = 1,
+                            Value = 15m
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("DefaultUnitId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Depth")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("Height")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<string>("ItemNumber")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("NetValue")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("PackageSize")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("decimal(65,30)")
+                        .HasDefaultValue(1m);
+
+                    b.Property<int>("SupplierId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Width")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DefaultUnitId");
+
+                    b.HasIndex("SupplierId");
+
+                    b.ToTable("Materials");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Supplier", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Comment")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailFirst")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailSecond")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("PhoneFirst")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("PhoneSecond")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Town")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ZipCode")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Suppliers");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Tax", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ShortName")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Taxes");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Deutschland Umsatzsteuer",
+                            ShortName = "Umst. (19%)",
+                            Value = 0.19m
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Deutschland Umsatzsteuer 2020",
+                            ShortName = "Umst. (16%) 2020",
+                            Value = 0.16m
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ShortName")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Units");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 8,
+                            Description = "Angabe in Einheit Milimeter",
+                            Name = "Milimeter",
+                            ShortName = "mm"
+                        },
+                        new
+                        {
+                            Id = 1,
+                            Description = "Angabe in Einheit Meter",
+                            Name = "Meter",
+                            ShortName = "m"
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Description = "Angabe in Einheit Quadratmeter",
+                            Name = "Quadratmeter",
+                            ShortName = "m²"
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Description = "Angabe in Einheit Kubikmeter",
+                            Name = "Kubikmeter",
+                            ShortName = "m³"
+                        },
+                        new
+                        {
+                            Id = 4,
+                            Description = "Angabe in Einheit Liter",
+                            Name = "Liter",
+                            ShortName = "l"
+                        },
+                        new
+                        {
+                            Id = 5,
+                            Description = "Angabe in Stückzahl",
+                            Name = "Stück",
+                            ShortName = "Stck."
+                        },
+                        new
+                        {
+                            Id = 6,
+                            Description = "Angabe in Stückzahl",
+                            Name = "Kilogramm",
+                            ShortName = "Kg"
+                        },
+                        new
+                        {
+                            Id = 7,
+                            Description = "Angabe in Zeitstunden",
+                            Name = "Stunden",
+                            ShortName = "Std."
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.Policy", b =>
+                {
+                    b.Property<string>("Name")
+                        .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+                    b.HasKey("Name");
+
+                    b.ToTable("Policies");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Accountname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<bool?>("Activated")
+                        .IsRequired()
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(true);
+
+                    b.Property<DateTime?>("Birthdate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Forename")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailAddress")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.UserPolicy", b =>
+                {
+                    b.Property<int>("UserId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("PolicyName")
+                        .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+                    b.HasKey("UserId", "PolicyName");
+
+                    b.ToTable("UserPolicies");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", "Customer")
+                        .WithMany("Crafts")
+                        .HasForeignKey("CustomerId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftEmployee", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", "Craft")
+                        .WithMany("CraftEmployees")
+                        .HasForeignKey("CraftId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", "Employee")
+                        .WithMany()
+                        .HasForeignKey("EmployeeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftMaterial", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", "Craft")
+                        .WithMany("CraftMaterials")
+                        .HasForeignKey("CraftId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", "Material")
+                        .WithMany()
+                        .HasForeignKey("MaterialId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Tax", "Tax")
+                        .WithMany("Customers")
+                        .HasForeignKey("TaxId")
+                        .OnDelete(DeleteBehavior.Restrict);
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.EmployeeDegree", "EmployeeDegree")
+                        .WithMany("Employees")
+                        .HasForeignKey("EmployeeDegreeId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", "DefaultUnit")
+                        .WithMany("Materials")
+                        .HasForeignKey("DefaultUnitId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Supplier", "Supplier")
+                        .WithMany("Materials")
+                        .HasForeignKey("SupplierId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.UserPolicy", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Rights.User", "User")
+                        .WithMany("Policies")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}

+ 23 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200721121705_Packaging.cs

@@ -0,0 +1,23 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    public partial class Packaging : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<decimal>(
+                name: "PackageSize",
+                table: "Materials",
+                nullable: false,
+                defaultValue: 1m);
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropColumn(
+                name: "PackageSize",
+                table: "Materials");
+        }
+    }
+}

+ 724 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200721132516_Titles.Designer.cs

@@ -0,0 +1,724 @@
+// <auto-generated />
+using System;
+using GreenTree.Strohrmann.ERP.Domain.Model;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    [DbContext(typeof(ERPDbContext))]
+    [Migration("20200721132516_Titles")]
+    partial class Titles
+    {
+        protected override void BuildTargetModel(ModelBuilder modelBuilder)
+        {
+#pragma warning disable 612, 618
+            modelBuilder
+                .HasAnnotation("ProductVersion", "3.1.5")
+                .HasAnnotation("Relational:MaxIdentifierLength", 64);
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<DateTime>("CreationDate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("CustomerId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("CustomerId");
+
+                    b.ToTable("Crafts");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftEmployee", b =>
+                {
+                    b.Property<int>("CraftId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("EmployeeId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("CraftId", "EmployeeId");
+
+                    b.HasIndex("EmployeeId");
+
+                    b.ToTable("CraftEmployees");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftMaterial", b =>
+                {
+                    b.Property<int>("CraftId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("MaterialId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Amount")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("CalculationFactor")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("CraftId", "MaterialId");
+
+                    b.HasIndex("MaterialId");
+
+                    b.ToTable("CraftMaterials");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CompanyName")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<bool>("IsBusiness")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(false);
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<int?>("TaxId")
+                        .HasColumnType("int");
+
+                    b.Property<int>("TitleId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Town")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ZipCode")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("TaxId");
+
+                    b.HasIndex("TitleId");
+
+                    b.ToTable("Customers");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<DateTime?>("Birthdate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("EmployeeDegreeId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailAddress")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("EmployeeDegreeId");
+
+                    b.ToTable("Employees");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.EmployeeDegree", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<int>("Order")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("EmployeeDegrees");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Meister",
+                            Order = 3,
+                            Value = 60m
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Geselle",
+                            Order = 2,
+                            Value = 30m
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Name = "Aushilfe",
+                            Order = 1,
+                            Value = 15m
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<int>("DefaultUnitId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Depth")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<string>("Description")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("Height")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<string>("ItemNumber")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("NetValue")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.Property<decimal>("PackageSize")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("decimal(65,30)")
+                        .HasDefaultValue(1m);
+
+                    b.Property<int>("SupplierId")
+                        .HasColumnType("int");
+
+                    b.Property<decimal>("Width")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.HasIndex("DefaultUnitId");
+
+                    b.HasIndex("SupplierId");
+
+                    b.ToTable("Materials");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Supplier", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Address")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ChangedBy")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime?>("ChangedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Comment")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("CreatedBy")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<DateTime>("CreatedOn")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailFirst")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailSecond")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("PhoneFirst")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("PhoneSecond")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Town")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ZipCode")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Suppliers");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Tax", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ShortName")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Taxes");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Deutschland Umsatzsteuer",
+                            ShortName = "Umst. (19%)",
+                            Value = 0.19m
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Deutschland Umsatzsteuer 2020",
+                            ShortName = "Umst. (16%) 2020",
+                            Value = 0.16m
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Title", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Titles");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Keiner"
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Herr"
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Name = "Frau"
+                        },
+                        new
+                        {
+                            Id = 4,
+                            Name = "Firma"
+                        },
+                        new
+                        {
+                            Id = 5,
+                            Name = "Familie"
+                        },
+                        new
+                        {
+                            Id = 6,
+                            Name = "Eheleute"
+                        },
+                        new
+                        {
+                            Id = 7,
+                            Name = "Herr und Frau"
+                        },
+                        new
+                        {
+                            Id = 8,
+                            Name = "Prof."
+                        },
+                        new
+                        {
+                            Id = 9,
+                            Name = "Dr."
+                        },
+                        new
+                        {
+                            Id = 10,
+                            Name = "Dr. med."
+                        },
+                        new
+                        {
+                            Id = 11,
+                            Name = "Prof. Dr."
+                        },
+                        new
+                        {
+                            Id = 12,
+                            Name = "Prof. Dr. med."
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Description")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("ShortName")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Units");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 8,
+                            Description = "Angabe in Einheit Milimeter",
+                            Name = "Milimeter",
+                            ShortName = "mm"
+                        },
+                        new
+                        {
+                            Id = 1,
+                            Description = "Angabe in Einheit Meter",
+                            Name = "Meter",
+                            ShortName = "m"
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Description = "Angabe in Einheit Quadratmeter",
+                            Name = "Quadratmeter",
+                            ShortName = "m²"
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Description = "Angabe in Einheit Kubikmeter",
+                            Name = "Kubikmeter",
+                            ShortName = "m³"
+                        },
+                        new
+                        {
+                            Id = 4,
+                            Description = "Angabe in Einheit Liter",
+                            Name = "Liter",
+                            ShortName = "l"
+                        },
+                        new
+                        {
+                            Id = 5,
+                            Description = "Angabe in Stückzahl",
+                            Name = "Stück",
+                            ShortName = "Stck."
+                        },
+                        new
+                        {
+                            Id = 6,
+                            Description = "Angabe in Stückzahl",
+                            Name = "Kilogramm",
+                            ShortName = "Kg"
+                        },
+                        new
+                        {
+                            Id = 7,
+                            Description = "Angabe in Zeitstunden",
+                            Name = "Stunden",
+                            ShortName = "Std."
+                        });
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.Policy", b =>
+                {
+                    b.Property<string>("Name")
+                        .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+                    b.HasKey("Name");
+
+                    b.ToTable("Policies");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.User", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Accountname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<bool?>("Activated")
+                        .IsRequired()
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("tinyint(1)")
+                        .HasDefaultValue(true);
+
+                    b.Property<DateTime?>("Birthdate")
+                        .HasColumnType("datetime(6)");
+
+                    b.Property<string>("Forename")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Lastname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("MailAddress")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Password")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Users");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.UserPolicy", b =>
+                {
+                    b.Property<int>("UserId")
+                        .HasColumnType("int");
+
+                    b.Property<string>("PolicyName")
+                        .HasColumnType("varchar(255) CHARACTER SET utf8mb4");
+
+                    b.HasKey("UserId", "PolicyName");
+
+                    b.ToTable("UserPolicies");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", "Customer")
+                        .WithMany("Crafts")
+                        .HasForeignKey("CustomerId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftEmployee", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", "Craft")
+                        .WithMany("CraftEmployees")
+                        .HasForeignKey("CraftId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", "Employee")
+                        .WithMany()
+                        .HasForeignKey("EmployeeId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.CraftMaterial", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Craft", "Craft")
+                        .WithMany("CraftMaterials")
+                        .HasForeignKey("CraftId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", "Material")
+                        .WithMany()
+                        .HasForeignKey("MaterialId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Customer", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Tax", "Tax")
+                        .WithMany("Customers")
+                        .HasForeignKey("TaxId")
+                        .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Title", "Title")
+                        .WithMany("Customers")
+                        .HasForeignKey("TitleId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.EmployeeDegree", "EmployeeDegree")
+                        .WithMany("Employees")
+                        .HasForeignKey("EmployeeDegreeId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", "DefaultUnit")
+                        .WithMany("Materials")
+                        .HasForeignKey("DefaultUnitId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Supplier", "Supplier")
+                        .WithMany("Materials")
+                        .HasForeignKey("SupplierId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Rights.UserPolicy", b =>
+                {
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Rights.User", "User")
+                        .WithMany("Policies")
+                        .HasForeignKey("UserId")
+                        .OnDelete(DeleteBehavior.Cascade)
+                        .IsRequired();
+                });
+#pragma warning restore 612, 618
+        }
+    }
+}

+ 80 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200721132516_Titles.cs

@@ -0,0 +1,80 @@
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    public partial class Titles : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.AddColumn<int>(
+                name: "TitleId",
+                table: "Customers",
+                nullable: false,
+                defaultValue: 1);
+
+            migrationBuilder.CreateTable(
+                name: "Titles",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Titles", x => x.Id);
+                });
+
+            migrationBuilder.InsertData(
+                table: "Titles",
+                columns: new[] { "Id", "Name" },
+                values: new object[,]
+                {
+                    { 1, "Keiner" },
+                    { 2, "Herr" },
+                    { 3, "Frau" },
+                    { 4, "Firma" },
+                    { 5, "Familie" },
+                    { 6, "Eheleute" },
+                    { 7, "Herr und Frau" },
+                    { 8, "Prof." },
+                    { 9, "Dr." },
+                    { 10, "Dr. med." },
+                    { 11, "Prof. Dr." },
+                    { 12, "Prof. Dr. med." }
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Customers_TitleId",
+                table: "Customers",
+                column: "TitleId");
+
+            migrationBuilder.AddForeignKey(
+                name: "FK_Customers_Titles_TitleId",
+                table: "Customers",
+                column: "TitleId",
+                principalTable: "Titles",
+                principalColumn: "Id",
+                onDelete: ReferentialAction.Restrict);
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropForeignKey(
+                name: "FK_Customers_Titles_TitleId",
+                table: "Customers");
+
+            migrationBuilder.DropTable(
+                name: "Titles");
+
+            migrationBuilder.DropIndex(
+                name: "IX_Customers_TitleId",
+                table: "Customers");
+
+            migrationBuilder.DropColumn(
+                name: "TitleId",
+                table: "Customers");
+        }
+    }
+}

+ 106 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/ERPDbContextModelSnapshot.cs

@@ -64,6 +64,9 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                     b.Property<decimal>("Amount")
                         .HasColumnType("decimal(65,30)");
 
+                    b.Property<decimal>("Value")
+                        .HasColumnType("decimal(65,30)");
+
                     b.HasKey("CraftId", "EmployeeId");
 
                     b.HasIndex("EmployeeId");
@@ -82,6 +85,9 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                     b.Property<decimal>("Amount")
                         .HasColumnType("decimal(65,30)");
 
+                    b.Property<decimal>("CalculationFactor")
+                        .HasColumnType("decimal(65,30)");
+
                     b.HasKey("CraftId", "MaterialId");
 
                     b.HasIndex("MaterialId");
@@ -135,6 +141,9 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                     b.Property<int?>("TaxId")
                         .HasColumnType("int");
 
+                    b.Property<int>("TitleId")
+                        .HasColumnType("int");
+
                     b.Property<string>("Town")
                         .IsRequired()
                         .HasColumnType("longtext CHARACTER SET utf8mb4");
@@ -147,6 +156,8 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
 
                     b.HasIndex("TaxId");
 
+                    b.HasIndex("TitleId");
+
                     b.ToTable("Customers");
                 });
 
@@ -280,6 +291,11 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                     b.Property<decimal>("NetValue")
                         .HasColumnType("decimal(65,30)");
 
+                    b.Property<decimal>("PackageSize")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("decimal(65,30)")
+                        .HasDefaultValue(1m);
+
                     b.Property<int>("SupplierId")
                         .HasColumnType("int");
 
@@ -395,6 +411,83 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                         });
                 });
 
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Title", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    b.Property<string>("Name")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.HasKey("Id");
+
+                    b.ToTable("Titles");
+
+                    b.HasData(
+                        new
+                        {
+                            Id = 1,
+                            Name = "Keiner"
+                        },
+                        new
+                        {
+                            Id = 2,
+                            Name = "Herr"
+                        },
+                        new
+                        {
+                            Id = 3,
+                            Name = "Frau"
+                        },
+                        new
+                        {
+                            Id = 4,
+                            Name = "Firma"
+                        },
+                        new
+                        {
+                            Id = 5,
+                            Name = "Familie"
+                        },
+                        new
+                        {
+                            Id = 6,
+                            Name = "Eheleute"
+                        },
+                        new
+                        {
+                            Id = 7,
+                            Name = "Herr und Frau"
+                        },
+                        new
+                        {
+                            Id = 8,
+                            Name = "Prof."
+                        },
+                        new
+                        {
+                            Id = 9,
+                            Name = "Dr."
+                        },
+                        new
+                        {
+                            Id = 10,
+                            Name = "Dr. med."
+                        },
+                        new
+                        {
+                            Id = 11,
+                            Name = "Prof. Dr."
+                        },
+                        new
+                        {
+                            Id = 12,
+                            Name = "Prof. Dr. med."
+                        });
+                });
+
             modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Unit", b =>
                 {
                     b.Property<int>("Id")
@@ -417,6 +510,13 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                     b.ToTable("Units");
 
                     b.HasData(
+                        new
+                        {
+                            Id = 8,
+                            Description = "Angabe in Einheit Milimeter",
+                            Name = "Milimeter",
+                            ShortName = "mm"
+                        },
                         new
                         {
                             Id = 1,
@@ -576,6 +676,12 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                         .WithMany("Customers")
                         .HasForeignKey("TaxId")
                         .OnDelete(DeleteBehavior.Restrict);
+
+                    b.HasOne("GreenTree.Strohrmann.ERP.Core.Domain.Business.Title", "Title")
+                        .WithMany("Customers")
+                        .HasForeignKey("TitleId")
+                        .OnDelete(DeleteBehavior.Restrict)
+                        .IsRequired();
                 });
 
             modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Employee", b =>

+ 3 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftEmployeeMapping.cs

@@ -16,6 +16,9 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
 
             builder.HasKey(ce => new { ce.CraftId, ce.EmployeeId });
 
+            builder.Property(ce => ce.Value)
+                .IsRequired();
+
             builder.HasOne(rp => rp.Craft)
                 .WithMany(r => r.CraftEmployees);
         }

+ 4 - 1
GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftMaterialMapping.cs

@@ -14,7 +14,10 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
         {
             builder.ToTable("CraftMaterials");
 
-            builder.HasKey(ce => new { ce.CraftId, ce.MaterialId });
+            builder.HasKey(cm => new { cm.CraftId, cm.MaterialId });
+
+            builder.Property(cm => cm.CalculationFactor)
+                .IsRequired();
 
             builder.HasOne(rp => rp.Craft)
                 .WithMany(r => r.CraftMaterials);

+ 5 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/CustomerMapping.cs

@@ -22,6 +22,11 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
             builder.Property(u => u.Id)
                 .ValueGeneratedOnAdd();
 
+            builder.HasOne(u => u.Title)
+                .WithMany(d => d.Customers)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+
             builder.Property(u => u.Firstname)
                 .IsRequired();
 

+ 4 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/MaterialMapping.cs

@@ -47,6 +47,10 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
                 .IsRequired()
                 .OnDelete(DeleteBehavior.Restrict);
 
+            builder.Property(u => u.PackageSize)
+                .IsRequired()
+                .HasDefaultValue(1);
+
             builder.HasOne(u => u.Supplier)
                 .WithMany(s => s.Materials)
                 .IsRequired()

+ 38 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/TitleMapping.cs

@@ -0,0 +1,38 @@
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
+{
+    class TitleMapping : IEntityTypeConfiguration<Title>
+    {
+        public void Configure(EntityTypeBuilder<Title> builder)
+        {
+            builder.ToTable("Titles");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.HasData(new Title(1, "Keiner"));
+            builder.HasData(new Title(2, "Herr"));
+            builder.HasData(new Title(3, "Frau"));
+            builder.HasData(new Title(4, "Firma"));
+            builder.HasData(new Title(5, "Familie"));
+            builder.HasData(new Title(6, "Eheleute"));
+            builder.HasData(new Title(7, "Herr und Frau"));
+            builder.HasData(new Title(8, "Prof."));
+            builder.HasData(new Title(9, "Dr."));
+            builder.HasData(new Title(10, "Dr. med."));
+            builder.HasData(new Title(11, "Prof. Dr."));
+            builder.HasData(new Title(12, "Prof. Dr. med."));
+        }
+    }
+}

+ 1 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/UnitMapping.cs

@@ -28,6 +28,7 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
                 .IsRequired(false);
 
             builder.HasData(
+                new Unit(8, "Milimeter", "mm", "Angabe in Einheit Milimeter"),
                 new Unit(1, "Meter", "m", "Angabe in Einheit Meter"),
                 new Unit(2, "Quadratmeter", "m²", "Angabe in Einheit Quadratmeter"),
                 new Unit(3, "Kubikmeter", "m³", "Angabe in Einheit Kubikmeter"),

+ 6 - 0
GreenTree.Strohrmann.ERP.Domain/Model/ERPDbContext.cs

@@ -30,6 +30,11 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model
         /// </summary>
         public DbSet<CraftMaterial> CraftMaterials { get; set; }
 
+        /// <summary>
+        /// Customer titles table
+        /// </summary>
+        public DbSet<Title> Titles { get; set; }
+
         /// <summary>
         /// Customers table
         /// </summary>
@@ -106,6 +111,7 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model
             modelBuilder.ApplyConfiguration(new CraftEmployeeMapping());
             modelBuilder.ApplyConfiguration(new CraftMapping());
             modelBuilder.ApplyConfiguration(new CraftMaterialMapping());
+            modelBuilder.ApplyConfiguration(new TitleMapping());
             modelBuilder.ApplyConfiguration(new CustomerMapping());
             modelBuilder.ApplyConfiguration(new EmployeeDegreeMapping());
             modelBuilder.ApplyConfiguration(new EmployeeMapping());

+ 145 - 0
GreenTree.Strohrmann.ERP.Web/Controllers/CraftController.cs

@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Http;
+using System.Threading.Tasks;
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+using GreenTree.Strohrmann.ERP.Core.Helper;
+using GreenTree.Strohrmann.ERP.Domain.Model;
+using GreenTree.Strohrmann.ERP.Services.Geolocator;
+using GreenTree.Strohrmann.ERP.Web.Extension;
+using GreenTree.Strohrmann.ERP.Web.Models.Business;
+using GreenTree.Strohrmann.ERP.Web.Models.Rights.User;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace GreenTree.Strohrmann.ERP.Web.Controllers
+{
+    public class CraftController : Controller
+    {
+        #region DI fields
+
+        // The global DbContext
+        private readonly ERPDbContext _eRPDbContext;
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the CraftController class
+        /// </summary>
+        /// <param name="eRPDbContext">Global DbContext.</param>
+        public CraftController(ERPDbContext eRPDbContext)
+        {
+            _eRPDbContext = eRPDbContext;
+        }
+
+        #endregion
+
+        #region Actions
+
+        // GET: CraftController
+        public ActionResult Index()
+        {
+            var crafts = _eRPDbContext.Crafts
+                .ToList()
+                .Select(c => new CraftModel(c));
+
+            return View(crafts);
+        }
+
+        // GET: CraftController/Details/5
+        public ActionResult Details(int id)
+        {
+            var craft = _eRPDbContext.Crafts
+                .FirstOrDefault(c => c.Id == id);
+
+            var craftModel = new CraftModel(craft);
+
+            return View(craftModel);
+        }
+
+        // GET: CraftController/Create
+        public ActionResult Create()
+        {
+            return View();
+        }
+
+        // POST: CraftController/Create
+        [HttpPost]
+        [ValidateAntiForgeryToken]
+        public ActionResult Create(CraftModel model)
+        {
+            if (!ModelState.IsValid)
+            {
+                return View(model);
+            }
+
+            //var craft = new Craft
+            //{
+            //    CreatedBy = User.Identity.Name,
+            //    CreatedOn = DateTime.Now
+            //};
+
+            //_eRPDbContext.Crafts.Add(craft);
+            //_eRPDbContext.SaveChanges();
+
+            return RedirectToAction(nameof(Index));
+        }
+
+        // GET: CraftController/AddCraftEmployeePartial
+        public ActionResult AddCraftEmployeePartial(CraftModel craftModel)
+        {
+            return PartialView("~/Views/Craft/_CraftEmployeePartial.cshtml", craftModel);
+        }
+
+        // GET: CraftController/Edit/5
+        public ActionResult Edit(int id)
+        {
+            var craft = _eRPDbContext.Crafts
+                .FirstOrDefault(c => c.Id == id);
+
+            var craftModel = new CraftModel(craft);
+
+            return View(craftModel);
+        }
+
+        // POST: CraftController/Edit/5
+        [HttpPost]
+        [ValidateAntiForgeryToken]
+        public ActionResult Edit(int id, CraftModel model)
+        {
+            if (!ModelState.IsValid)
+            {
+                return View(model);
+            }
+
+            var craft = _eRPDbContext.Crafts
+                .FirstOrDefault(u => u.Id == id);
+
+            craft.ChangedBy = User.Identity.Name;
+            craft.ChangedOn = DateTime.Now;
+
+            _eRPDbContext.SaveChanges();
+
+            return RedirectToAction(nameof(Index));
+        }
+
+        // POST: CraftController/Delete/5
+        [HttpPost]
+        [ValidateAntiForgeryToken]
+        public ActionResult Delete(int id, IFormCollection collection)
+        {
+            var craft = _eRPDbContext.Crafts
+                .FirstOrDefault(c => c.Id == id);
+
+            _eRPDbContext.Crafts.Remove(craft);
+            _eRPDbContext.SaveChanges();
+
+            return RedirectToAction(nameof(Index));
+        }
+
+        #endregion
+    }
+}

+ 15 - 0
GreenTree.Strohrmann.ERP.Web/Controllers/CustomerController.cs

@@ -7,6 +7,7 @@ using GreenTree.Strohrmann.ERP.Core.Domain.Business;
 using GreenTree.Strohrmann.ERP.Core.Helper;
 using GreenTree.Strohrmann.ERP.Domain.Model;
 using GreenTree.Strohrmann.ERP.Services.Geolocator;
+using GreenTree.Strohrmann.ERP.Web.Extension;
 using GreenTree.Strohrmann.ERP.Web.Models.Business;
 using GreenTree.Strohrmann.ERP.Web.Models.Rights.User;
 using Microsoft.AspNetCore.Http;
@@ -62,6 +63,8 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
         // GET: CustomerController/Create
         public ActionResult Create()
         {
+            ViewData.AddSelectList("AvailableTitles", _eRPDbContext.Titles, m => m.Id, m => m.Name, 1);
+
             return View();
         }
 
@@ -71,10 +74,15 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
         public ActionResult Create(CustomerModel model)
         {
             if (!ModelState.IsValid)
+            {
+                ViewData.AddSelectList("AvailableTitles", _eRPDbContext.Titles, m => m.Id, m => m.Name, 1);
+
                 return View(model);
+            }
 
             var customer = new Customer
             {
+                Title = _eRPDbContext.Titles.Find(model.Title.Id),
                 Firstname = model.Firstname,
                 Lastname = model.Lastname,
                 CompanyName = model.CompanyName,
@@ -96,6 +104,8 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
         // GET: CustomerController/Edit/5
         public ActionResult Edit(int id)
         {
+            ViewData.AddSelectList("AvailableTitles", _eRPDbContext.Titles, m => m.Id, m => m.Name, 1);
+
             var customer = _eRPDbContext.Customers
                 .FirstOrDefault(c => c.Id == id);
 
@@ -110,11 +120,16 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
         public ActionResult Edit(int id, CustomerModel model)
         {
             if (!ModelState.IsValid)
+            {
+                ViewData.AddSelectList("AvailableTitles", _eRPDbContext.Titles, m => m.Id, m => m.Name, 1);
+
                 return View(model);
+            }
 
             var customer = _eRPDbContext.Customers
                 .FirstOrDefault(u => u.Id == id);
 
+            customer.Title = _eRPDbContext.Titles.Find(model.Title.Id);
             customer.Firstname = model.Firstname;
             customer.Lastname = model.Lastname;
             customer.CompanyName = model.CompanyName;

+ 14 - 4
GreenTree.Strohrmann.ERP.Web/Controllers/MaterialController.cs

@@ -64,7 +64,9 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
         public ActionResult Create()
         {
             ViewData.AddSelectList("AvailableUnits", 
-                _eRPDbContext.Units, m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
+                _eRPDbContext.Units
+                    .OrderBy(u => u.Name), 
+                m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
 
             ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
 
@@ -79,7 +81,9 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
             if (!ModelState.IsValid)
             {
                 ViewData.AddSelectList("AvailableUnits",
-                    _eRPDbContext.Units, m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
+                    _eRPDbContext.Units
+                        .OrderBy(u => u.Name),
+                    m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
 
                 ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
 
@@ -96,6 +100,7 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
                 Width = model.Width,
                 Depth = model.Depth,
                 DefaultUnit = _eRPDbContext.Units.Find(model.DefaultUnit.Id),
+                PackageSize = model.PackageSize,
                 Supplier = _eRPDbContext.Suppliers.Find(model.Supplier.Id),
                 CreatedBy = User.Identity.Name,
                 CreatedOn = DateTime.Now
@@ -111,7 +116,9 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
         public ActionResult Edit(int id)
         {
             ViewData.AddSelectList("AvailableUnits",
-                _eRPDbContext.Units, m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
+                _eRPDbContext.Units
+                    .OrderBy(u => u.Name),
+                m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
 
             ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
 
@@ -131,7 +138,9 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
             if (!ModelState.IsValid)
             {
                 ViewData.AddSelectList("AvailableUnits",
-                    _eRPDbContext.Units, m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
+                    _eRPDbContext.Units
+                        .OrderBy(u => u.Name),
+                    m => m.Id, m => String.Format("{0} ({1})", m.Name, m.ShortName));
 
                 ViewData.AddSelectList("AvailableSuppliers", _eRPDbContext.Suppliers, m => m.Id, m => m.Name);
 
@@ -149,6 +158,7 @@ namespace GreenTree.Strohrmann.ERP.Web.Controllers
             material.Width = model.Width;
             material.Depth = model.Depth;
             material.DefaultUnit = _eRPDbContext.Units.Find(model.DefaultUnit.Id);
+            material.PackageSize = model.PackageSize;
             material.Supplier = _eRPDbContext.Suppliers.Find(model.Supplier.Id);
             material.ChangedBy = User.Identity.Name;
             material.ChangedOn = DateTime.Now;

+ 81 - 0
GreenTree.Strohrmann.ERP.Web/Models/Business/CraftEmployeeModel.cs

@@ -0,0 +1,81 @@
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+using GreenTree.Strohrmann.ERP.Web.Models.Shared;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace GreenTree.Strohrmann.ERP.Web.Models.Business
+{
+    public class CraftEmployeeModel
+    {
+        #region Properties
+
+        /// <summary>
+        /// Craft employee model index
+        /// </summary>
+        public int Index { get; set; }
+
+        /// <summary>
+        /// Craft id
+        /// </summary>
+        [Display(Name = "ID")]
+        public int CraftId { get; set; }
+
+        /// <summary>
+        /// Craft
+        /// </summary>
+        [Display(Name = "Gewerk")]
+        public virtual CraftModel Craft { get; set; }
+
+        /// <summary>
+        /// Employee id
+        /// </summary>
+        [Display(Name = "Mitarbeiter ID")]
+        public int EmployeeId { get; set; }
+
+        /// <summary>
+        /// Employee
+        /// </summary>
+        [Display(Name = "Mitarbeiter")]
+        public virtual EmployeeModel Employee { get; set; }
+
+        /// <summary>
+        /// The amount of employee working hours
+        /// </summary>
+        [Display(Name = "Menge / Dauer")]
+        public decimal Amount { get; set; }
+
+        /// <summary>
+        /// The value of the employee working hours
+        /// </summary>
+        [Display(Name = "Wert")]
+        public float Value { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the CraftEmployeeModel class
+        /// </summary>
+        public CraftEmployeeModel() { }
+
+        /// <summary>
+        /// Initializes a new instance of the CraftEmployeeModel class
+        /// </summary>
+        /// <param name="craftEmployee">The base craft employee.</param>
+        public CraftEmployeeModel(CraftEmployee craftEmployee)
+        {
+            if (craftEmployee == null) return;
+
+            CraftId = craftEmployee.CraftId;
+            EmployeeId = craftEmployee.EmployeeId;
+            Amount = craftEmployee.Amount;
+            Value = Convert.ToSingle(craftEmployee.Value);
+        }
+
+        #endregion
+    }
+}

+ 81 - 0
GreenTree.Strohrmann.ERP.Web/Models/Business/CraftMaterialModel.cs

@@ -0,0 +1,81 @@
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+using GreenTree.Strohrmann.ERP.Web.Models.Shared;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace GreenTree.Strohrmann.ERP.Web.Models.Business
+{
+    public class CraftMaterialModel
+    {
+        #region Properties
+
+        /// <summary>
+        /// Craft employee model index
+        /// </summary>
+        public int Index { get; set; }
+
+        /// <summary>
+        /// Craft id
+        /// </summary>
+        [Display(Name = "ID")]
+        public int CraftId { get; set; }
+
+        /// <summary>
+        /// Craft
+        /// </summary>
+        [Display(Name = "Gewerk")]
+        public virtual CraftModel Craft { get; set; }
+
+        /// <summary>
+        /// Material id
+        /// </summary>
+        [Display(Name = "Material ID")]
+        public int MaterialId { get; set; }
+
+        /// <summary>
+        /// Material
+        /// </summary>
+        [Display(Name = "Material")]
+        public MaterialModel Material { get; set; }
+
+        /// <summary>
+        /// The amount of the material
+        /// </summary>
+        [Display(Name = "Menge")]
+        public decimal Amount { get; set; }
+
+        /// <summary>
+        /// The material calculation factor
+        /// </summary>
+        [Display(Name = "Kalkulationsfaktor")]
+        public decimal CalculationFactor { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the CraftMaterialModel class
+        /// </summary>
+        public CraftMaterialModel() { }
+
+        /// <summary>
+        /// Initializes a new instance of the CraftMaterialModel class
+        /// </summary>
+        /// <param name="craftMaterial">The base craft material.</param>
+        public CraftMaterialModel(CraftMaterial craftMaterial)
+        {
+            if (craftMaterial == null) return;
+
+            CraftId = craftMaterial.CraftId;
+            MaterialId = craftMaterial.MaterialId;
+            Amount = craftMaterial.Amount;
+            CalculationFactor = craftMaterial.CalculationFactor;
+        }
+
+        #endregion
+    }
+}

+ 81 - 0
GreenTree.Strohrmann.ERP.Web/Models/Business/CraftModel.cs

@@ -0,0 +1,81 @@
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace GreenTree.Strohrmann.ERP.Web.Models.Business
+{
+    public class CraftModel
+    {
+        #region Properties
+
+        /// <summary>
+        /// Craft id
+        /// </summary>
+        [Display(Name = "ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Craft name
+        /// </summary>
+        [Display(Name = "Name")]
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Craft creation date
+        /// </summary>
+        [Display(Name = "Gestartet am")]
+        public DateTime CreationDate { get; set; }
+
+        /// <summary>
+        /// Craft customer
+        /// </summary>
+        [Display(Name = "Kunde")]
+        public CustomerModel Customer { get; set; }
+
+        /// <summary>
+        /// Craft employees
+        /// </summary>
+        [Display(Name = "Stunden")]
+        public List<CraftEmployeeModel> CraftEmployees { get; set; }
+
+        /// <summary>
+        /// Craft materials
+        /// </summary>
+        [Display(Name = "Material")]
+        public List<CraftMaterialModel> CraftMaterials { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the CraftModel class
+        /// </summary>
+        public CraftModel() { }
+
+        /// <summary>
+        /// Initializes a new instance of the CraftModel class
+        /// </summary>
+        /// <param name="craft">The base craft.</param>
+        public CraftModel(Craft craft)
+        {
+            if (craft == null) return;
+
+            Id = craft.Id;
+            Name = craft.Name;
+            CreationDate = craft.CreationDate;
+            Customer = new CustomerModel(craft.Customer);
+            CraftEmployees = craft.CraftEmployees
+                .Select(ce => new CraftEmployeeModel(ce))
+                .ToList();
+            CraftMaterials = craft.CraftMaterials
+                .Select(cm => new CraftMaterialModel(cm))
+                .ToList();
+        }
+
+        #endregion
+    }
+}

+ 19 - 0
GreenTree.Strohrmann.ERP.Web/Models/Business/CustomerModel.cs

@@ -18,6 +18,12 @@ namespace GreenTree.Strohrmann.ERP.Web.Models.Business
         [Display(Name = "ID")]
         public int Id { get; set; }
 
+        /// <summary>
+        /// Customer title
+        /// </summary>
+        [Display(Name = "Anrede")]
+        public TitleModel Title { get; set; }
+
         /// <summary>
         /// Customer forename
         /// </summary>
@@ -30,6 +36,18 @@ namespace GreenTree.Strohrmann.ERP.Web.Models.Business
         [Display(Name = "Nachname")]
         public string Lastname { get; set; }
 
+        /// <summary>
+        /// Customer full name
+        /// </summary>
+        [Display(Name = "Voller Name")]
+        public string Fullname 
+        { 
+            get
+            {
+                return String.Format("{0} {1}", Firstname, Lastname);
+            }
+        }
+
         /// <summary>
         /// Customer company name
         /// </summary>
@@ -97,6 +115,7 @@ namespace GreenTree.Strohrmann.ERP.Web.Models.Business
             if (customer == null) return;
 
             Id = customer.Id;
+            Title = new TitleModel(customer.Title);
             Firstname = customer.Firstname;
             Lastname = customer.Lastname;
             CompanyName = customer.CompanyName;

+ 8 - 1
GreenTree.Strohrmann.ERP.Web/Models/Business/MaterialModel.cs

@@ -69,7 +69,7 @@ namespace GreenTree.Strohrmann.ERP.Web.Models.Business
         {
             get
             {
-                return String.Format("{0}x{1}x{2}", Height, Width, Depth);
+                return String.Format("{0:F2}x{1:F2}x{2:F2}", Height, Width, Depth);
             }
         }
 
@@ -79,6 +79,12 @@ namespace GreenTree.Strohrmann.ERP.Web.Models.Business
         [Display(Name = "Einheit")]
         public UnitModel DefaultUnit { get; set; }
 
+        /// <summary>
+        /// The amount of items per package
+        /// </summary>
+        [Display(Name = "Packungsgröße / -menge")]
+        public decimal PackageSize { get; set; }
+
         /// <summary>
         /// Material supplier
         /// </summary>
@@ -112,6 +118,7 @@ namespace GreenTree.Strohrmann.ERP.Web.Models.Business
             Width = material.Width;
             Depth = material.Depth;
             DefaultUnit = new UnitModel(material.DefaultUnit);
+            PackageSize = material.PackageSize;
             Supplier = new SupplierModel(material.Supplier);
         }
 

+ 60 - 0
GreenTree.Strohrmann.ERP.Web/Models/Business/TitleModel.cs

@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace GreenTree.Strohrmann.ERP.Web.Models.Business
+{
+    public class TitleModel
+    {
+        #region Properties
+
+        /// <summary>
+        /// Tax id
+        /// </summary>
+        [Display(Name = "ID")]
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Tax name
+        /// </summary>
+        [Display(Name = "Name")]
+        public string Name { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the TitleModel class
+        /// </summary>
+        public TitleModel() { }
+
+        /// <summary>
+        /// Initializes a new instance of the TitleModel class
+        /// </summary>
+        /// <param name="tax">Base tax entity.</param>
+        public TitleModel(Core.Domain.Business.Title title)
+        {
+            if (title == null) return;
+
+            Id = title.Id;
+            Name = title.Name;
+        }
+
+        #endregion
+
+        #region Overrides
+
+        /// <summary>
+        /// Returns a string that represents the current object with its' name
+        /// </summary>
+        public override string ToString()
+        {
+            return Name;
+        }
+
+        #endregion
+    }
+}

+ 83 - 0
GreenTree.Strohrmann.ERP.Web/Views/Craft/Create.cshtml

@@ -0,0 +1,83 @@
+@model GreenTree.Strohrmann.ERP.Web.Models.Business.CraftModel
+
+@{
+    ViewData["Title"] = "Neues Gewerk";
+}
+
+<script type="text/javascript">
+
+    function addCraftEmployeePartial() {
+        $.ajax({
+            type: "GET",
+            url: '@Url.Action("AddCraftEmployeePartial")',
+            data: {
+                Index: $("#craftemployeelist").children(".row").length
+			},
+            success: function (data) { 
+                $("#craftemployeelist").append(data);
+            },
+            error: function (errorData) { console.error(errorData); }
+        });
+	}
+
+</script>
+
+<h1>Gewerk erstellen</h1>
+
+<h4>Neues Gewerk</h4>
+<hr />
+
+<form asp-action="Create">
+    <div asp-validation-summary="ModelOnly" class="text-danger"></div>
+    <div class="card-deck">
+        <div class="card card-maxw bg-light">
+            <div class="card-header pb-1">
+                <h6>Allgemein</h6>
+            </div>
+            <div class="card-body">
+                <div class="form-group">
+                    <label asp-for="Name" class="control-label"></label>
+                    <input asp-for="Name" class="form-control" />
+                    <span asp-validation-for="Name" class="text-danger"></span>
+                </div>
+                <div class="form-group">
+                    <label asp-for="CreationDate" class="control-label"></label>
+                    <input asp-for="CreationDate" class="form-control" />
+                    <span asp-validation-for="CreationDate" class="text-danger"></span>
+                </div>
+                <div class="form-group">
+                    <label asp-for="Customer" class="control-label"></label>
+                    @*@Html.DropDownListFor(e => e.Customer.Id, 
+                        (IEnumerable<SelectListItem>)ViewData["AvailableCustomers"], 
+                        new { @class = "form-control" })*@
+                    <span asp-validation-for="Customer" class="text-danger"></span>
+                </div>
+            </div>
+        </div>
+        <div class="card bg-light">
+            <div class="card-header pb-1">
+                <h6 class="float-left">Arbeitsstunden</h6>
+                <a class="float-right" href="#" onclick="addCraftEmployeePartial()">Hinzufügen</a>
+            </div>
+            <div id="craftemployeelist" class="card-body">
+                <partial name="_CraftEmployeePartial" />
+            </div>
+        </div>
+        @*<div class="card card-maxw bg-light">
+            <div class="card-header pb-1">
+                <h6>Materialien</h6>
+            </div>
+            <div class="card-body">
+            </div>
+        </div>*@
+    </div>
+
+    <hr />
+
+    <div class="form-group d-flex mt-3">
+        <input type="submit" value="Erstellen" class="btn btn-primary" />
+        <div class="align-self-center ml-3">
+            <a asp-action="Index">Zurück zur Liste</a>
+        </div>
+    </div>
+</form>

+ 133 - 0
GreenTree.Strohrmann.ERP.Web/Views/Craft/Index.cshtml

@@ -0,0 +1,133 @@
+@model IEnumerable<GreenTree.Strohrmann.ERP.Web.Models.Business.CraftModel>
+
+@{
+    ViewData["Title"] = "Gewerksliste";
+}
+
+<!-- Custom JavaScript -->
+<script>
+
+    $(document).ready(function () {
+        $("#craftsTable").DataTable({
+            autoWidth: false,
+            paging: true,
+            pageLength: 50,
+            "bInfo": false,
+            columns: [
+                {
+                    data: "@Html.DisplayNameFor(model => model.Id)",
+                    orderable: true
+                },
+                {
+                    data: "@Html.DisplayNameFor(model => model.Name)",
+                    orderable: true
+                },
+                {
+                    data: "@Html.DisplayNameFor(model => model.CreationDate)",
+                    orderable: true
+                },
+                {
+                    data: "@Html.DisplayNameFor(model => model.Customer)",
+                    orderable: true
+                },
+                {
+                    data: "Aktionen",
+                    orderable: false
+				}
+            ],
+            language: {
+                zeroRecords: "Keine Einträge gefunden",
+                search: "Suchen:",
+                info: "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
+                lengthMenu: "Zeige _MENU_ Einträge",
+                paginate: {
+                    first: "Erste",
+                    last: "Letzte",
+                    next: "Nächste",
+                    previous: "Vorige"
+				}
+			}
+        });
+    });
+
+    function showDeleteModal(id) {
+        if (!id) return;
+        $('#deleteModal').modal("show");
+        $("[name='id'").val(id);
+    }
+
+</script>
+
+<h1>Gewerksliste</h1>
+
+<p>
+    <a asp-action="Create">Neues Gewerk erstellen</a>
+</p>
+
+<table id="craftsTable" class="table table-striped responsive">
+    <thead>
+        <tr>
+            <th data-priority="1">
+                @Html.DisplayNameFor(model => model.Id)
+            </th>
+            <th data-priority="2">
+                @Html.DisplayNameFor(model => model.Name)
+            </th>
+            <th data-priority="3">
+                @Html.DisplayNameFor(model => model.CreationDate)
+            </th>
+            <th data-priority="4">
+                @Html.DisplayNameFor(model => model.Customer)
+            </th>
+            <th data-priority="1">
+                Aktionen
+            </th>
+        </tr>
+    </thead>
+    <tbody>
+@foreach (var item in Model) {
+        <tr>
+            <td>
+                @Html.DisplayFor(modelItem => item.Id)
+            </td>
+            <td>
+                @Html.DisplayFor(modelItem => item.Name)
+            </td>
+            <td>
+                @Html.DisplayFor(modelItem => item.CreationDate)
+            </td>
+            <td>
+                @Html.DisplayFor(modelItem => item.Customer.Fullname)
+            </td>
+            <td>
+                @Html.ActionLink("Bearbeiten", "Edit", new { id = item.Id }) |
+                @Html.ActionLink("Anzeigen", "Details", new { id = item.Id }) |
+                <a href="#" onclick="showDeleteModal(@item.Id)">Löschen</a>
+            </td>
+        </tr>
+}
+    </tbody>
+</table>
+
+<div id="deleteModal" class="modal fade" tabindex="-1" role="dialog">
+    <div class="modal-dialog" role="document">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">Gewerk löschen</h5>
+                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                    <span aria-hidden="true">&times;</span>
+                </button>
+            </div>
+            <form asp-action="Delete">
+                <div class="modal-body">
+                    <p>Sind Sie sicher, dass Sie dieses Gewerk löschen möchten?</p>
+                    <input name="id" type="hidden" />
+                </div>
+                <div class="modal-footer">
+                    <button type="submit" class="btn btn-primary">Ja</button>
+                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Nein</button>
+                </div>
+            </form>
+        </div>
+    </div>
+</div>

+ 23 - 0
GreenTree.Strohrmann.ERP.Web/Views/Craft/_CraftEmployeePartial.cshtml

@@ -0,0 +1,23 @@
+@model dynamic
+
+@{ 
+	var index = Convert.ToInt32(ViewData["Index"]);
+}
+
+<div class="row">
+    <div class="form-group col-md-4">
+        <label asp-for="EmployeeId" class="control-label"></label>
+        <input asp-for="EmployeeId" name="CraftEmployees" class="form-control" />
+        <span asp-validation-for="EmployeeId" class="text-danger"></span>
+    </div>
+    <div class="form-group col-md-4">
+        <label asp-for="CraftEmployees[index].Amount" class="control-label"></label>
+        <input asp-for="CraftEmployees[index].Amount" class="form-control" />
+        <span asp-validation-for="CraftEmployees[index].Amount" class="text-danger"></span>
+    </div>
+    <div class="form-group col-md-4">
+        <label asp-for="CraftEmployees[index].Value" class="control-label"></label>
+        <input asp-for="CraftEmployees[index].Value" class="form-control" />
+        <span asp-validation-for="CraftEmployees[index].Value" class="text-danger"></span>
+    </div>
+</div>

+ 7 - 0
GreenTree.Strohrmann.ERP.Web/Views/Customer/Create.cshtml

@@ -17,6 +17,13 @@
                 <h6>Kundenname / -firma</h6>
             </div>
             <div class="card-body">
+                <div class="form-group">
+                    <label asp-for="Title" class="control-label"></label>
+                    @Html.DropDownListFor(e => e.Title.Id, 
+                        (IEnumerable<SelectListItem>)ViewData["AvailableTitles"], 
+                        new { @class = "form-control" })
+                    <span asp-validation-for="Title" class="text-danger"></span>
+                </div>
                 <div class="form-group">
                     <label asp-for="Firstname" class="control-label"></label>
                     <input asp-for="Firstname" class="form-control" />

+ 6 - 0
GreenTree.Strohrmann.ERP.Web/Views/Customer/Details.cshtml

@@ -23,6 +23,12 @@
                 <dd class = "col-sm-6">
                     @Html.DisplayFor(model => model.Id)
                 </dd>
+                <dt class = "col-sm-6">
+                    @Html.DisplayNameFor(model => model.Title)
+                </dt>
+                <dd class = "col-sm-6">
+                    @Html.DisplayFor(model => model.Title.Name)
+                </dd>
                 <dt class = "col-sm-6">
                     @Html.DisplayNameFor(model => model.Firstname)
                 </dt>

+ 7 - 0
GreenTree.Strohrmann.ERP.Web/Views/Customer/Edit.cshtml

@@ -19,6 +19,13 @@
                 <h6>Kundenname / -firma</h6>
             </div>
             <div class="card-body">
+                <div class="form-group">
+                    <label asp-for="Title" class="control-label"></label>
+                    @Html.DropDownListFor(e => e.Title.Id, 
+                        (IEnumerable<SelectListItem>)ViewData["AvailableTitles"], 
+                        new { @class = "form-control" })
+                    <span asp-validation-for="Title" class="text-danger"></span>
+                </div>
                 <div class="form-group">
                     <label asp-for="Firstname" class="control-label"></label>
                     <input asp-for="Firstname" class="form-control" />

+ 5 - 0
GreenTree.Strohrmann.ERP.Web/Views/Material/Create.cshtml

@@ -66,6 +66,11 @@
                     <input asp-for="Depth" class="form-control" />
                     <span asp-validation-for="Depth" class="text-danger"></span>
                 </div>
+                <div class="form-group">
+                    <label asp-for="PackageSize" class="control-label"></label>
+                    <input asp-for="PackageSize" value="1" class="form-control" />
+                    <span asp-validation-for="PackageSize" class="text-danger"></span>
+                </div>
             </div>
         </div>
         <div class="card card-maxw bg-light">

+ 6 - 0
GreenTree.Strohrmann.ERP.Web/Views/Material/Details.cshtml

@@ -68,6 +68,12 @@
                 <dd class = "col-sm-6">
                     @Html.DisplayFor(model => model.Depth)
                 </dd>
+                <dt class = "col-sm-6">
+                    @Html.DisplayNameFor(model => model.PackageSize)
+                </dt>
+                <dd class = "col-sm-6">
+                    @Html.DisplayFor(model => model.PackageSize)
+                </dd>
             </dl>
         </div>
     </div>

+ 6 - 1
GreenTree.Strohrmann.ERP.Web/Views/Material/Edit.cshtml

@@ -63,6 +63,11 @@
                     <input asp-for="Depth" class="form-control" />
                     <span asp-validation-for="Depth" class="text-danger"></span>
                 </div>
+                <div class="form-group">
+                    <label asp-for="PackageSize" class="control-label"></label>
+                    <input asp-for="PackageSize" class="form-control" />
+                    <span asp-validation-for="PackageSize" class="text-danger"></span>
+                </div>
             </div>
         </div>
         <div class="card card-maxw bg-light">
@@ -74,7 +79,7 @@
                     <label asp-for="DefaultUnit" class="control-label">Rechte</label>
                     @Html.DropDownListFor(m => m.Supplier.Id, 
                         (IEnumerable<SelectListItem>)ViewData["AvailableSuppliers"], 
-                        new { @class = "form-control selectpicker", data_live_search = "true" })
+                        new { @class = "form-control selectpicker", data_live_search = "true", data_style = "selectpicker-form" })
                     <span asp-validation-for="DefaultUnit" class="text-danger"></span>
                 </div>
                 <div class="form-group">