Prechádzať zdrojové kódy

Datenbank-BusinessModel erstellt

Arne Diekmann 5 rokov pred
rodič
commit
e4513598e6
32 zmenil súbory, kde vykonal 2910 pridanie a 6 odobranie
  1. 39 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Craft.cs
  2. 34 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftEmployee.cs
  3. 34 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftMaterial.cs
  4. 59 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Customer.cs
  5. 39 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Employee.cs
  6. 62 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/EmployeeDegree.cs
  7. 59 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Material.cs
  8. 74 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Supplier.cs
  9. 62 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Tax.cs
  10. 62 0
      GreenTree.Strohrmann.ERP.Core/Domain/Business/Unit.cs
  11. 526 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155000_BusinessModel.Designer.cs
  12. 324 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155000_BusinessModel.cs
  13. 549 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155632_EmployeeDegree_Seed.Designer.cs
  14. 43 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155632_EmployeeDegree_Seed.cs
  15. 453 0
      GreenTree.Strohrmann.ERP.Domain/Migrations/ERPDbContextModelSnapshot.cs
  16. 23 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftEmployeeMapping.cs
  17. 33 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftMapping.cs
  18. 23 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftMaterialMapping.cs
  19. 45 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/CustomerMapping.cs
  20. 36 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/EmployeeDegreeMapping.cs
  21. 39 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/EmployeeMapping.cs
  22. 53 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/MaterialMapping.cs
  23. 55 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/SupplierMapping.cs
  24. 35 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/TaxMapping.cs
  25. 40 0
      GreenTree.Strohrmann.ERP.Domain/Model/Business/UnitMapping.cs
  26. 73 0
      GreenTree.Strohrmann.ERP.Domain/Model/ERPDbContext.cs
  27. BIN
      GreenTree.Strohrmann.ERP.Domain/_MySqlWorkbenchModels/Migration_BusinessModel.mwb
  28. 8 0
      GreenTree.Strohrmann.ERP.Services/Authorization/DefaultAuthorizationHandler.cs
  29. 8 1
      GreenTree.Strohrmann.ERP.Web/Startup.cs
  30. 1 1
      GreenTree.Strohrmann.ERP.Web/appsettings.json
  31. 16 1
      GreenTree.Strohrmann.ERP.Web/wwwroot/css/site.css
  32. 3 3
      GreenTree.Strohrmann.ERP.sln

+ 39 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Craft.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Craft
+    {
+        /// <summary>
+        /// Craft id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Craft name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Craft creation date
+        /// </summary>
+        public DateTime CreationDate { get; set; }
+
+        /// <summary>
+        /// Craft customer
+        /// </summary>
+        public virtual Customer Customer { get; set; }
+
+        /// <summary>
+        /// Craft employees
+        /// </summary>
+        public virtual ICollection<CraftEmployee> CraftEmployees { get; set; }
+
+        /// <summary>
+        /// Craft materials
+        /// </summary>
+        public virtual ICollection<CraftMaterial> CraftMaterials { get; set; }
+    }
+}

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

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class CraftEmployee
+    {
+        /// <summary>
+        /// Craft id
+        /// </summary>
+        public int CraftId { get; set; }
+
+        /// <summary>
+        /// Craft
+        /// </summary>
+        public virtual Craft Craft { get; set; }
+
+        /// <summary>
+        /// Employee id
+        /// </summary>
+        public int EmployeeId { get; set; }
+
+        /// <summary>
+        /// Employee
+        /// </summary>
+        public virtual Employee Employee { get; set; }
+
+        /// <summary>
+        /// The amount of employee working hours
+        /// </summary>
+        public decimal Amount { get; set; }
+    }
+}

+ 34 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/CraftMaterial.cs

@@ -0,0 +1,34 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class CraftMaterial
+    {
+        /// <summary>
+        /// Craft id
+        /// </summary>
+        public int CraftId { get; set; }
+
+        /// <summary>
+        /// Craft
+        /// </summary>
+        public virtual Craft Craft { get; set; }
+
+        /// <summary>
+        /// Material id
+        /// </summary>
+        public int MaterialId { get; set; }
+
+        /// <summary>
+        /// Material
+        /// </summary>
+        public virtual Material Material { get; set; }
+
+        /// <summary>
+        /// The amount of employee working hours
+        /// </summary>
+        public decimal Amount { get; set; }
+    }
+}

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

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Customer
+    {
+        /// <summary>
+        /// Customer id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Customer forename
+        /// </summary>
+        public string Firstname { get; set; }
+
+        /// <summary>
+        /// Customer lastname
+        /// </summary>
+        public string Lastname { get; set; }
+
+        /// <summary>
+        /// Customer company name
+        /// </summary>
+        public string CompanyName { get; set; }
+
+        /// <summary>
+        /// Customer address
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// Customer town
+        /// </summary>
+        public string Town { get; set; }
+
+        /// <summary>
+        /// Customer zip code
+        /// </summary>
+        public string ZipCode { get; set; }
+
+        /// <summary>
+        /// Customer country
+        /// </summary>
+        public string Country { get; set; }
+
+        /// <summary>
+        /// Customer tax
+        /// </summary>
+        public virtual Tax Tax { get; set; }
+
+        /// <summary>
+        /// Customer crafts
+        /// </summary>
+        public virtual ICollection<Craft> Crafts { get; set; }
+    }
+}

+ 39 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Employee.cs

@@ -0,0 +1,39 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Employee
+    {
+        /// <summary>
+        /// Employee Id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Employee first name
+        /// </summary>
+        public string Firstname { get; set; }
+
+        /// <summary>
+        /// Employee last name
+        /// </summary>
+        public string Lastname { get; set; }
+
+        /// <summary>
+        /// Employee mail address
+        /// </summary>
+        public string MailAddress { get; set; }
+
+        /// <summary>
+        /// Employee birthdate
+        /// </summary>
+        public DateTime? Birthdate { get; set; }
+
+        /// <summary>
+        /// Employee degree
+        /// </summary>
+        public virtual EmployeeDegree EmployeeDegree { get; set; }
+    }
+}

+ 62 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/EmployeeDegree.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class EmployeeDegree
+    {
+        #region Properties
+
+        /// <summary>
+        /// Degree Id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Degree name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Degree value
+        /// </summary>
+        public decimal Value { get; set; }
+
+        /// <summary>
+        /// Degree order
+        /// </summary>
+        public int Order { get; set; }
+
+        /// <summary>
+        /// Employees with that degree
+        /// </summary>
+        public virtual ICollection<Employee> Employees { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the EmployeeDegree class
+        /// </summary>
+        public EmployeeDegree() {  }
+
+        /// <summary>
+        /// Initializes a new instance of the EmployeeDegree class
+        /// </summary>
+        /// <param name="id">The id.</param>
+        /// <param name="name">The name.</param>
+        /// <param name="value">The base value.</param>
+        /// <param name="order">The ordering value.</param>
+        public EmployeeDegree(int id, string name, decimal value, int order)
+        {
+            Id = id;
+            Name = name;
+            Value = value;
+            Order = order;
+        }
+
+        #endregion
+    }
+}

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

@@ -0,0 +1,59 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Material
+    {
+        /// <summary>
+        /// Material id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Material name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Material item number
+        /// </summary>
+        public string ItemNumber { get; set; }
+
+        /// <summary>
+        /// Material description
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        /// Material net value
+        /// </summary>
+        public decimal NetValue { get; set; }
+
+        /// <summary>
+        /// Material height
+        /// </summary>
+        public decimal Height { get; set; }
+
+        /// <summary>
+        /// Material width
+        /// </summary>
+        public decimal Width { get; set; }
+
+        /// <summary>
+        /// Material depth
+        /// </summary>
+        public decimal Depth { get; set; }
+
+        /// <summary>
+        /// Material default unit
+        /// </summary>
+        public virtual Unit DefaultUnit { get; set; }
+
+        /// <summary>
+        /// Material supplier
+        /// </summary>
+        public virtual Supplier Supplier { get; set; }
+    }
+}

+ 74 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Supplier.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Supplier
+    {
+        /// <summary>
+        /// Supplier Id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Supplier name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Supplier description
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        /// Supplier address
+        /// </summary>
+        public string Address { get; set; }
+
+        /// <summary>
+        /// Supplier town
+        /// </summary>
+        public string Town { get; set; }
+
+        /// <summary>
+        /// Supplier zip code
+        /// </summary>
+        public string ZipCode { get; set; }
+
+        /// <summary>
+        /// Supplier country
+        /// </summary>
+        public string Country { get; set; }
+
+        /// <summary>
+        /// Supplier contact phone 1
+        /// </summary>
+        public string PhoneFirst { get; set; }
+
+        /// <summary>
+        /// Supplier contact phone 2
+        /// </summary>
+        public string PhoneSecond { get; set; }
+
+        /// <summary>
+        /// Supplier contact mail 1
+        /// </summary>
+        public string MailFirst { get; set; }
+
+        /// <summary>
+        /// Supplier contact mail 2
+        /// </summary>
+        public string MailSecond { get; set; }
+
+        /// <summary>
+        /// Supplier custom comment
+        /// </summary>
+        public string Comment { get; set; }
+
+        /// <summary>
+        /// Supplier materials
+        /// </summary>
+        public virtual ICollection<Material> Materials { get; set; }
+    }
+}

+ 62 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Tax.cs

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

+ 62 - 0
GreenTree.Strohrmann.ERP.Core/Domain/Business/Unit.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace GreenTree.Strohrmann.ERP.Core.Domain.Business
+{
+    public class Unit
+    {
+        #region Properties
+
+        /// <summary>
+        /// Unit id
+        /// </summary>
+        public int Id { get; set; }
+
+        /// <summary>
+        /// Unit name
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// Unit short name
+        /// </summary>
+        public string ShortName { get; set; }
+
+        /// <summary>
+        /// Unit description
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        /// Unit materials
+        /// </summary>
+        public virtual ICollection<Material> Materials { get; set; }
+
+        #endregion
+
+        #region Ctor
+
+        /// <summary>
+        /// Initializes a new instance of the Unit class
+        /// </summary>
+        public Unit() { }
+
+        /// <summary>
+        /// Initializes a new instance of the Unit class
+        /// </summary>
+        /// <param name="id">The id.</param>
+        /// <param name="name">The name.</param>
+        /// <param name="shortName">The short name.</param>
+        /// <param name="description">The description.</param>
+        public Unit(int id, string name, string shortName, string description)
+        {
+            Id = id;
+            Name = name;
+            ShortName = shortName;
+            Description = description;
+        }
+
+        #endregion
+    }
+}

+ 526 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155000_BusinessModel.Designer.cs

@@ -0,0 +1,526 @@
+// <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("20200701155000_BusinessModel")]
+    partial class BusinessModel
+    {
+        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<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.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.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>("CompanyName")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    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<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");
+                });
+
+            modelBuilder.Entity("GreenTree.Strohrmann.ERP.Core.Domain.Business.Material", b =>
+                {
+                    b.Property<int>("Id")
+                        .ValueGeneratedOnAdd()
+                        .HasColumnType("int");
+
+                    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>("Comment")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    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 = 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)
+                        .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
+        }
+    }
+}

+ 324 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155000_BusinessModel.cs

@@ -0,0 +1,324 @@
+using System;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    public partial class BusinessModel : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.CreateTable(
+                name: "EmployeeDegrees",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false),
+                    Value = table.Column<decimal>(nullable: false),
+                    Order = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_EmployeeDegrees", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Suppliers",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false),
+                    Description = table.Column<string>(nullable: true),
+                    Address = table.Column<string>(nullable: false),
+                    Town = table.Column<string>(nullable: false),
+                    ZipCode = table.Column<string>(nullable: false),
+                    Country = table.Column<string>(nullable: false),
+                    PhoneFirst = table.Column<string>(nullable: true),
+                    PhoneSecond = table.Column<string>(nullable: true),
+                    MailFirst = table.Column<string>(nullable: true),
+                    MailSecond = table.Column<string>(nullable: true),
+                    Comment = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Suppliers", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Taxes",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false),
+                    ShortName = table.Column<string>(nullable: false),
+                    Value = table.Column<decimal>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Taxes", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Units",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false),
+                    ShortName = table.Column<string>(nullable: false),
+                    Description = table.Column<string>(nullable: true)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Units", x => x.Id);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Employees",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Firstname = table.Column<string>(nullable: false),
+                    Lastname = table.Column<string>(nullable: false),
+                    MailAddress = table.Column<string>(nullable: true),
+                    Birthdate = table.Column<DateTime>(nullable: true),
+                    EmployeeDegreeId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Employees", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Employees_EmployeeDegrees_EmployeeDegreeId",
+                        column: x => x.EmployeeDegreeId,
+                        principalTable: "EmployeeDegrees",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Customers",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Firstname = table.Column<string>(nullable: false),
+                    Lastname = table.Column<string>(nullable: false),
+                    CompanyName = table.Column<string>(nullable: true),
+                    Address = table.Column<string>(nullable: false),
+                    Town = table.Column<string>(nullable: false),
+                    ZipCode = table.Column<string>(nullable: false),
+                    Country = table.Column<string>(nullable: false),
+                    TaxId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Customers", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Customers_Taxes_TaxId",
+                        column: x => x.TaxId,
+                        principalTable: "Taxes",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Materials",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false),
+                    ItemNumber = table.Column<string>(nullable: false),
+                    Description = table.Column<string>(nullable: false),
+                    NetValue = table.Column<decimal>(nullable: false),
+                    Height = table.Column<decimal>(nullable: false),
+                    Width = table.Column<decimal>(nullable: false),
+                    Depth = table.Column<decimal>(nullable: false),
+                    DefaultUnitId = table.Column<int>(nullable: false),
+                    SupplierId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Materials", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Materials_Units_DefaultUnitId",
+                        column: x => x.DefaultUnitId,
+                        principalTable: "Units",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                    table.ForeignKey(
+                        name: "FK_Materials_Suppliers_SupplierId",
+                        column: x => x.SupplierId,
+                        principalTable: "Suppliers",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "Crafts",
+                columns: table => new
+                {
+                    Id = table.Column<int>(nullable: false)
+                        .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn),
+                    Name = table.Column<string>(nullable: false),
+                    CreationDate = table.Column<DateTime>(nullable: false),
+                    CustomerId = table.Column<int>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_Crafts", x => x.Id);
+                    table.ForeignKey(
+                        name: "FK_Crafts_Customers_CustomerId",
+                        column: x => x.CustomerId,
+                        principalTable: "Customers",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Restrict);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "CraftEmployees",
+                columns: table => new
+                {
+                    CraftId = table.Column<int>(nullable: false),
+                    EmployeeId = table.Column<int>(nullable: false),
+                    Amount = table.Column<decimal>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CraftEmployees", x => new { x.CraftId, x.EmployeeId });
+                    table.ForeignKey(
+                        name: "FK_CraftEmployees_Crafts_CraftId",
+                        column: x => x.CraftId,
+                        principalTable: "Crafts",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CraftEmployees_Employees_EmployeeId",
+                        column: x => x.EmployeeId,
+                        principalTable: "Employees",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.CreateTable(
+                name: "CraftMaterials",
+                columns: table => new
+                {
+                    CraftId = table.Column<int>(nullable: false),
+                    MaterialId = table.Column<int>(nullable: false),
+                    Amount = table.Column<decimal>(nullable: false)
+                },
+                constraints: table =>
+                {
+                    table.PrimaryKey("PK_CraftMaterials", x => new { x.CraftId, x.MaterialId });
+                    table.ForeignKey(
+                        name: "FK_CraftMaterials_Crafts_CraftId",
+                        column: x => x.CraftId,
+                        principalTable: "Crafts",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                    table.ForeignKey(
+                        name: "FK_CraftMaterials_Materials_MaterialId",
+                        column: x => x.MaterialId,
+                        principalTable: "Materials",
+                        principalColumn: "Id",
+                        onDelete: ReferentialAction.Cascade);
+                });
+
+            migrationBuilder.InsertData(
+                table: "Taxes",
+                columns: new[] { "Id", "Name", "ShortName", "Value" },
+                values: new object[,]
+                {
+                    { 1, "Deutschland Umsatzsteuer", "Umst. (19%)", 0.19m },
+                    { 2, "Deutschland Umsatzsteuer 2020", "Umst. (16%) 2020", 0.16m }
+                });
+
+            migrationBuilder.InsertData(
+                table: "Units",
+                columns: new[] { "Id", "Description", "Name", "ShortName" },
+                values: new object[,]
+                {
+                    { 1, "Angabe in Einheit Meter", "Meter", "m" },
+                    { 2, "Angabe in Einheit Quadratmeter", "Quadratmeter", "m²" },
+                    { 3, "Angabe in Einheit Kubikmeter", "Kubikmeter", "m³" },
+                    { 4, "Angabe in Einheit Liter", "Liter", "l" },
+                    { 5, "Angabe in Stückzahl", "Stück", "Stck." },
+                    { 6, "Angabe in Stückzahl", "Kilogramm", "Kg" },
+                    { 7, "Angabe in Zeitstunden", "Stunden", "Std." }
+                });
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CraftEmployees_EmployeeId",
+                table: "CraftEmployees",
+                column: "EmployeeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_CraftMaterials_MaterialId",
+                table: "CraftMaterials",
+                column: "MaterialId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Crafts_CustomerId",
+                table: "Crafts",
+                column: "CustomerId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Customers_TaxId",
+                table: "Customers",
+                column: "TaxId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Employees_EmployeeDegreeId",
+                table: "Employees",
+                column: "EmployeeDegreeId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Materials_DefaultUnitId",
+                table: "Materials",
+                column: "DefaultUnitId");
+
+            migrationBuilder.CreateIndex(
+                name: "IX_Materials_SupplierId",
+                table: "Materials",
+                column: "SupplierId");
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DropTable(
+                name: "CraftEmployees");
+
+            migrationBuilder.DropTable(
+                name: "CraftMaterials");
+
+            migrationBuilder.DropTable(
+                name: "Employees");
+
+            migrationBuilder.DropTable(
+                name: "Crafts");
+
+            migrationBuilder.DropTable(
+                name: "Materials");
+
+            migrationBuilder.DropTable(
+                name: "EmployeeDegrees");
+
+            migrationBuilder.DropTable(
+                name: "Customers");
+
+            migrationBuilder.DropTable(
+                name: "Units");
+
+            migrationBuilder.DropTable(
+                name: "Suppliers");
+
+            migrationBuilder.DropTable(
+                name: "Taxes");
+        }
+    }
+}

+ 549 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155632_EmployeeDegree_Seed.Designer.cs

@@ -0,0 +1,549 @@
+// <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("20200701155632_EmployeeDegree_Seed")]
+    partial class EmployeeDegree_Seed
+    {
+        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<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.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.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>("CompanyName")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    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<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<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>("Comment")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    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 = 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)
+                        .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
+        }
+    }
+}

+ 43 - 0
GreenTree.Strohrmann.ERP.Domain/Migrations/20200701155632_EmployeeDegree_Seed.cs

@@ -0,0 +1,43 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Migrations
+{
+    public partial class EmployeeDegree_Seed : Migration
+    {
+        protected override void Up(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.InsertData(
+                table: "EmployeeDegrees",
+                columns: new[] { "Id", "Name", "Order", "Value" },
+                values: new object[] { 1, "Meister", 3, 60m });
+
+            migrationBuilder.InsertData(
+                table: "EmployeeDegrees",
+                columns: new[] { "Id", "Name", "Order", "Value" },
+                values: new object[] { 2, "Geselle", 2, 30m });
+
+            migrationBuilder.InsertData(
+                table: "EmployeeDegrees",
+                columns: new[] { "Id", "Name", "Order", "Value" },
+                values: new object[] { 3, "Aushilfe", 1, 15m });
+        }
+
+        protected override void Down(MigrationBuilder migrationBuilder)
+        {
+            migrationBuilder.DeleteData(
+                table: "EmployeeDegrees",
+                keyColumn: "Id",
+                keyValue: 1);
+
+            migrationBuilder.DeleteData(
+                table: "EmployeeDegrees",
+                keyColumn: "Id",
+                keyValue: 2);
+
+            migrationBuilder.DeleteData(
+                table: "EmployeeDegrees",
+                keyColumn: "Id",
+                keyValue: 3);
+        }
+    }
+}

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

@@ -17,6 +17,387 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                 .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<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.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.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>("CompanyName")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Firstname")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    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<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<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>("Comment")
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    b.Property<string>("Country")
+                        .IsRequired()
+                        .HasColumnType("longtext CHARACTER SET utf8mb4");
+
+                    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 = 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")
@@ -80,6 +461,78 @@ namespace GreenTree.Strohrmann.ERP.Domain.Migrations
                     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)
+                        .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")

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

@@ -0,0 +1,23 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using GreenTree.Strohrmann.ERP.Core.Domain.Rights;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
+{
+    public class CraftEmployeeMapping : IEntityTypeConfiguration<CraftEmployee>
+    {
+        public void Configure(EntityTypeBuilder<CraftEmployee> builder)
+        {
+            builder.ToTable("CraftEmployees");
+
+            builder.HasKey(ce => new { ce.CraftId, ce.EmployeeId });
+
+            builder.HasOne(rp => rp.Craft)
+                .WithMany(r => r.CraftEmployees);
+        }
+    }
+}

+ 33 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftMapping.cs

@@ -0,0 +1,33 @@
+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
+{
+    public class CraftMapping : IEntityTypeConfiguration<Craft>
+    {
+        public void Configure(EntityTypeBuilder<Craft> builder)
+        {
+            builder.ToTable("Crafts");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.Property(u => u.CreationDate)
+                .IsRequired();
+
+            builder.HasOne(u => u.Customer)
+                .WithMany(d => d.Crafts)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
+    }
+}

+ 23 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/CraftMaterialMapping.cs

@@ -0,0 +1,23 @@
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+using GreenTree.Strohrmann.ERP.Core.Domain.Rights;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+
+namespace GreenTree.Strohrmann.ERP.Domain.Model.Business
+{
+    public class CraftMaterialMapping : IEntityTypeConfiguration<CraftMaterial>
+    {
+        public void Configure(EntityTypeBuilder<CraftMaterial> builder)
+        {
+            builder.ToTable("CraftMaterials");
+
+            builder.HasKey(ce => new { ce.CraftId, ce.MaterialId });
+
+            builder.HasOne(rp => rp.Craft)
+                .WithMany(r => r.CraftMaterials);
+        }
+    }
+}

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

@@ -0,0 +1,45 @@
+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
+{
+    public class CustomerMapping : IEntityTypeConfiguration<Customer>
+    {
+        public void Configure(EntityTypeBuilder<Customer> builder)
+        {
+            builder.ToTable("Customers");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Firstname)
+                .IsRequired();
+
+            builder.Property(u => u.Lastname)
+                .IsRequired();
+
+            builder.Property(u => u.Address)
+                .IsRequired();
+
+            builder.Property(u => u.Town)
+                .IsRequired();
+
+            builder.Property(u => u.ZipCode)
+                .IsRequired();
+
+            builder.Property(u => u.Country)
+                .IsRequired();
+
+            builder.HasOne(u => u.Tax)
+                .WithMany(d => d.Customers)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
+    }
+}

+ 36 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/EmployeeDegreeMapping.cs

@@ -0,0 +1,36 @@
+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
+{
+    public class EmployeeDegreeMapping : IEntityTypeConfiguration<EmployeeDegree>
+    {
+        public void Configure(EntityTypeBuilder<EmployeeDegree> builder)
+        {
+            builder.ToTable("EmployeeDegrees");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.Property(u => u.Value)
+                .IsRequired();
+
+            builder.Property(u => u.Order)
+                .IsRequired();
+
+            builder.HasData(
+                new EmployeeDegree(1, "Meister", 60m, 3),
+                new EmployeeDegree(2, "Geselle", 30m, 2),
+                new EmployeeDegree(3, "Aushilfe", 15m, 1));
+        }
+    }
+}

+ 39 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/EmployeeMapping.cs

@@ -0,0 +1,39 @@
+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
+{
+    public class EmployeeMapping : IEntityTypeConfiguration<Employee>
+    {
+        public void Configure(EntityTypeBuilder<Employee> builder)
+        {
+            builder.ToTable("Employees");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Firstname)
+                .IsRequired();
+
+            builder.Property(u => u.Lastname)
+                .IsRequired();
+
+            builder.Property(u => u.MailAddress)
+                .IsRequired(false);
+
+            builder.Property(u => u.Birthdate)
+                .IsRequired(false);
+
+            builder.HasOne(u => u.EmployeeDegree)
+                .WithMany(d => d.Employees)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
+    }
+}

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

@@ -0,0 +1,53 @@
+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
+{
+    public class MaterialMapping : IEntityTypeConfiguration<Material>
+    {
+        public void Configure(EntityTypeBuilder<Material> builder)
+        {
+            builder.ToTable("Materials");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.Property(u => u.ItemNumber)
+                .IsRequired();
+
+            builder.Property(u => u.Description)
+                .IsRequired();
+
+            builder.Property(u => u.NetValue)
+                .IsRequired();
+
+            builder.Property(u => u.Height)
+                .IsRequired();
+
+            builder.Property(u => u.Width)
+                .IsRequired();
+
+            builder.Property(u => u.Depth)
+                .IsRequired();
+
+            builder.HasOne(u => u.DefaultUnit)
+                .WithMany(s => s.Materials)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+
+            builder.HasOne(u => u.Supplier)
+                .WithMany(s => s.Materials)
+                .IsRequired()
+                .OnDelete(DeleteBehavior.Restrict);
+        }
+    }
+}

+ 55 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/SupplierMapping.cs

@@ -0,0 +1,55 @@
+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
+{
+    public class SupplierMapping : IEntityTypeConfiguration<Supplier>
+    {
+        public void Configure(EntityTypeBuilder<Supplier> builder)
+        {
+            builder.ToTable("Suppliers");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.Property(u => u.Description)
+                .IsRequired(false);
+
+            builder.Property(u => u.Address)
+                .IsRequired();
+
+            builder.Property(u => u.Town)
+                .IsRequired();
+
+            builder.Property(u => u.ZipCode)
+                .IsRequired();
+
+            builder.Property(u => u.Country)
+                .IsRequired();
+
+            builder.Property(u => u.PhoneFirst)
+                .IsRequired(false);
+
+            builder.Property(u => u.PhoneSecond)
+                .IsRequired(false);
+
+            builder.Property(u => u.MailFirst)
+                .IsRequired(false);
+
+            builder.Property(u => u.MailSecond)
+                .IsRequired(false);
+
+            builder.Property(u => u.Comment)
+                .IsRequired(false);
+        }
+    }
+}

+ 35 - 0
GreenTree.Strohrmann.ERP.Domain/Model/Business/TaxMapping.cs

@@ -0,0 +1,35 @@
+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
+{
+    public class TaxMapping : IEntityTypeConfiguration<Tax>
+    {
+        public void Configure(EntityTypeBuilder<Tax> builder)
+        {
+            builder.ToTable("Taxes");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.Property(u => u.ShortName)
+                .IsRequired();
+
+            builder.Property(u => u.Value)
+                .IsRequired();
+
+            builder.HasData(
+                new Tax(1, "Deutschland Umsatzsteuer", "Umst. (19%)", 0.19m),
+                new Tax(2, "Deutschland Umsatzsteuer 2020", "Umst. (16%) 2020", 0.16m));
+        }
+    }
+}

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

@@ -0,0 +1,40 @@
+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
+{
+    public class UnitMapping : IEntityTypeConfiguration<Unit>
+    {
+        public void Configure(EntityTypeBuilder<Unit> builder)
+        {
+            builder.ToTable("Units");
+
+            builder.HasKey(u => u.Id);
+
+            builder.Property(u => u.Id)
+                .ValueGeneratedOnAdd();
+
+            builder.Property(u => u.Name)
+                .IsRequired();
+
+            builder.Property(u => u.ShortName)
+                .IsRequired();
+
+            builder.Property(u => u.Description)
+                .IsRequired(false);
+
+            builder.HasData(
+                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"),
+                new Unit(4, "Liter", "l", "Angabe in Einheit Liter"),
+                new Unit(5, "Stück", "Stck.", "Angabe in Stückzahl"),
+                new Unit(6, "Kilogramm", "Kg", "Angabe in Stückzahl"),
+                new Unit(7, "Stunden", "Std.", "Angabe in Zeitstunden"));
+        }
+    }
+}

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

@@ -6,6 +6,8 @@ using System;
 using System.Collections.Generic;
 using System.Reflection;
 using System.Text;
+using GreenTree.Strohrmann.ERP.Core.Domain.Business;
+using GreenTree.Strohrmann.ERP.Domain.Model.Business;
 
 namespace GreenTree.Strohrmann.ERP.Domain.Model
 {
@@ -13,6 +15,51 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model
     {
         #region Tables
 
+        /// <summary>
+        /// Crafts table
+        /// </summary>
+        public DbSet<Craft> Crafts { get; set; }
+
+        /// <summary>
+        /// Craft employees trable
+        /// </summary>
+        public DbSet<CraftEmployee> CraftEmployees { get; set; }
+
+        /// <summary>
+        /// Craft materials table
+        /// </summary>
+        public DbSet<CraftMaterial> CraftMaterials { get; set; }
+
+        /// <summary>
+        /// Customers table
+        /// </summary>
+        public DbSet<Customer> Customers { get; set; }
+
+        /// <summary>
+        /// Employees table
+        /// </summary>
+        public DbSet<Employee> Employees { get; set; }
+
+        /// <summary>
+        /// Materials table
+        /// </summary>
+        public DbSet<Material> Materials { get; set; }
+
+        /// <summary>
+        /// Suppliers table
+        /// </summary>
+        public DbSet<Supplier> Suppliers { get; set; }
+
+        /// <summary>
+        /// Taxes table
+        /// </summary>
+        public DbSet<Tax> Taxes { get; set; }
+
+        /// <summary>
+        /// Units table
+        /// </summary>
+        public DbSet<Unit> Units { get; set; }
+
         /// <summary>
         /// Users table
         /// </summary>
@@ -51,11 +98,37 @@ namespace GreenTree.Strohrmann.ERP.Domain.Model
         /// <param name="modelBuilder">The model builder.</param>
         protected override void OnModelCreating(ModelBuilder modelBuilder)
         {
+            modelBuilder.ApplyConfiguration(new CraftEmployeeMapping());
+            modelBuilder.ApplyConfiguration(new CraftMapping());
+            modelBuilder.ApplyConfiguration(new CraftMaterialMapping());
+            modelBuilder.ApplyConfiguration(new CustomerMapping());
+            modelBuilder.ApplyConfiguration(new EmployeeDegreeMapping());
+            modelBuilder.ApplyConfiguration(new EmployeeMapping());
+            modelBuilder.ApplyConfiguration(new MaterialMapping());
+            modelBuilder.ApplyConfiguration(new SupplierMapping());
+            modelBuilder.ApplyConfiguration(new TaxMapping());
+            modelBuilder.ApplyConfiguration(new UnitMapping());
             modelBuilder.ApplyConfiguration(new UserMapping());
             modelBuilder.ApplyConfiguration(new PolicyMapping());
             modelBuilder.ApplyConfiguration(new UserPolicyMapping());
         }
 
         #endregion
+
+        #region Data
+
+        /// <summary>
+        /// Create seed data for the model database
+        /// </summary>
+        /// <typeparam name="T">The entity type gaining the seed data.</typeparam>
+        /// <param name="modelBuilder">The basted model builder.</param>
+        /// <param name="data">The seeded data.</param>
+        private void CreateSeedDate<T>(ModelBuilder modelBuilder, params T[] data)
+        {
+            modelBuilder.Entity(typeof(T))
+                .HasData(data);
+        }
+
+        #endregion
     }
 }

BIN
GreenTree.Strohrmann.ERP.Domain/_MySqlWorkbenchModels/Migration_BusinessModel.mwb


+ 8 - 0
GreenTree.Strohrmann.ERP.Services/Authorization/DefaultAuthorizationHandler.cs

@@ -68,6 +68,14 @@ namespace GreenTree.Strohrmann.ERP.Services.Authorization
         /// <returns>Returns a succeeded or failed task if the user is authorized for the required resource.</returns>
         protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, DefaultAuthorizationPolicy requirement)
         {
+            // Check if the checked requirement is the default policy and allow access when authenticated
+            if (requirement.Policy == String.Empty && context.User.Identity.IsAuthenticated)
+            {
+                context.Succeed(requirement);
+
+                return Task.CompletedTask;
+            }
+
             // Check admin state of user
             var isAdmin = context.User.Identity.Name == Options.Administrator;
 

+ 8 - 1
GreenTree.Strohrmann.ERP.Web/Startup.cs

@@ -103,7 +103,10 @@ namespace GreenTree.Strohrmann.ERP.Web
               .AddFluentValidation(fv => fv.RegisterValidatorsFromAssembly(Assembly.GetExecutingAssembly()));
 
             // Add authentication
-            services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
+            services.AddAuthentication(options => 
+                {
+                    options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
+                })
                 .AddCookie(options => 
                 {
                     options.Cookie.HttpOnly = true;
@@ -122,6 +125,10 @@ namespace GreenTree.Strohrmann.ERP.Web
 
             services.AddAuthorization(options =>
             {
+                options.DefaultPolicy = new AuthorizationPolicy(
+                    new[] { new DefaultAuthorizationPolicy(String.Empty) },
+                    new[] { CookieAuthenticationDefaults.AuthenticationScheme });
+
                 foreach (var policy in _availablePolicies)
                 {
                     options.AddPolicy(policy, a =>

+ 1 - 1
GreenTree.Strohrmann.ERP.Web/appsettings.json

@@ -18,7 +18,7 @@
     },
     "AdministrationOptions": {
         "Administrator": "admin",
-        "Password": "2fbc1282c8d00d1b0726a5a00d13214f"
+        "Password": "a3b9c163f6c520407ff34cfdb83ca5c6"
     },
     "MailNotificationOptions": {
         "From": "no-reply@Strohrmann-ERP",

+ 16 - 1
GreenTree.Strohrmann.ERP.Web/wwwroot/css/site.css

@@ -60,7 +60,7 @@ html {
 
 body {
   /* Margin bottom by footer height */
-  margin-bottom: 60px;
+/*  margin-bottom: 60px;*/
 }
 .footer {
   position: absolute;
@@ -89,4 +89,19 @@ body {
 .form-signin #Password {
     border-top-right-radius: 0;
     border-top-left-radius: 0;
+}
+
+/* Scrollbar */
+::-webkit-scrollbar-track {
+    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3);
+    background-color: #F5F5F5;
+}
+
+::-webkit-scrollbar {
+    width: 8px;
+}
+
+::-webkit-scrollbar-thumb {
+    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,.3);
+    background-color: #A0A0A0;
 }

+ 3 - 3
GreenTree.Strohrmann.ERP.sln

@@ -5,11 +5,11 @@ VisualStudioVersion = 16.0.30128.74
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GreenTree.Strohrmann.ERP.Web", "GreenTree.Strohrmann.ERP.Web\GreenTree.Strohrmann.ERP.Web.csproj", "{89AB9F15-D295-4FAF-9D17-94837B6FCC88}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenTree.Strohrmann.ERP.Core", "GreenTree.Strohrmann.ERP.Core\GreenTree.Strohrmann.ERP.Core.csproj", "{FFCD2FAA-BF47-4626-921B-DAAE7F128C50}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GreenTree.Strohrmann.ERP.Core", "GreenTree.Strohrmann.ERP.Core\GreenTree.Strohrmann.ERP.Core.csproj", "{FFCD2FAA-BF47-4626-921B-DAAE7F128C50}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenTree.Strohrmann.ERP.Domain", "GreenTree.Strohrmann.ERP.Domain\GreenTree.Strohrmann.ERP.Domain.csproj", "{96B5B639-9B4C-42E1-AE9A-4214F7E08BE1}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GreenTree.Strohrmann.ERP.Domain", "GreenTree.Strohrmann.ERP.Domain\GreenTree.Strohrmann.ERP.Domain.csproj", "{96B5B639-9B4C-42E1-AE9A-4214F7E08BE1}"
 EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GreenTree.Strohrmann.ERP.Services", "GreenTree.Strohrmann.ERP.Services\GreenTree.Strohrmann.ERP.Services.csproj", "{A73D3126-2A0F-4D71-ACBA-44C841BFDA22}"
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GreenTree.Strohrmann.ERP.Services", "GreenTree.Strohrmann.ERP.Services\GreenTree.Strohrmann.ERP.Services.csproj", "{A73D3126-2A0F-4D71-ACBA-44C841BFDA22}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution