// <auto-generated />
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
using PSManagement.Infrastructure.Persistence;

namespace PSManagement.Infrastructure.Persistence.Migrations
{
    [DbContext(typeof(AppDbContext))]
    partial class AppDbContextModelSnapshot : ModelSnapshot
    {
        protected override void BuildModel(ModelBuilder modelBuilder)
        {
#pragma warning disable 612, 618
            modelBuilder
                .HasAnnotation("Relational:Collation", "Arabic_CI_AS")
                .HasAnnotation("Relational:MaxIdentifierLength", 128)
                .HasAnnotation("ProductVersion", "5.0.17")
                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

            modelBuilder.Entity("PSManagement.Domain.Customers.Entities.ContactInfo", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("ContactType")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("ContactValue")
                        .HasColumnType("nvarchar(max)");

                    b.Property<int?>("CustomerId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("CustomerId");

                    b.ToTable("ContactInfo");
                });

            modelBuilder.Entity("PSManagement.Domain.Customers.Entities.Customer", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("CustomerName")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("Email")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Customers");
                });

            modelBuilder.Entity("PSManagement.Domain.Employees.Entities.Department", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Departments");

                    b.HasData(
                        new
                        {
                            Id = 1,
                            Name = "قسم المعلوميات"
                        },
                        new
                        {
                            Id = 2,
                            Name = "قسم النظم الإلكترونية"
                        },
                        new
                        {
                            Id = 3,
                            Name = "قسم الميكاترونيكس"
                        },
                        new
                        {
                            Id = 4,
                            Name = "قسم الفيزياء"
                        },
                        new
                        {
                            Id = 5,
                            Name = "مديرية التطوير والخدمات البرمجية"
                        },
                        new
                        {
                            Id = 6,
                            Name = "شؤون الطلاب"
                        });
                });

            modelBuilder.Entity("PSManagement.Domain.Employees.Entities.Employee", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int>("DepartmentId")
                        .HasColumnType("int");

                    b.Property<int>("HIASTId")
                        .HasColumnType("int");

                    b.Property<int>("UserId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("DepartmentId");

                    b.HasIndex("UserId")
                        .IsUnique();

                    b.ToTable("Employees");
                });

            modelBuilder.Entity("PSManagement.Domain.FinancialSpends.Entities.FinancialSpending", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("CostType")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("Description")
                        .HasColumnType("nvarchar(max)");

                    b.Property<DateTime>("ExpectedSpendingDate")
                        .HasColumnType("datetime2");

                    b.Property<int>("LocalPurchase")
                        .HasColumnType("int");

                    b.Property<int>("ProjectId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("ProjectId");

                    b.ToTable("FinancialSpendings");
                });

            modelBuilder.Entity("PSManagement.Domain.Identity.Entities.Permission", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Permission");
                });

            modelBuilder.Entity("PSManagement.Domain.Identity.Entities.Role", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Name")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Roles");

                    b.HasData(
                        new
                        {
                            Id = 1,
                            Name = "Admin"
                        },
                        new
                        {
                            Id = 2,
                            Name = "Employee"
                        },
                        new
                        {
                            Id = 4,
                            Name = "Scientific-Deputy"
                        });
                });

            modelBuilder.Entity("PSManagement.Domain.Identity.Entities.User", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Email")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("HashedPassword")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("UserName")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Users");

                    b.HasData(
                        new
                        {
                            Id = 2,
                            Email = "Admin@Admin",
                            HashedPassword = "1234",
                            UserName = "Admin"
                        });
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Attachment", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("AttachmentDescription")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("AttachmentName")
                        .HasColumnType("nvarchar(max)");

                    b.Property<string>("AttachmentUrl")
                        .HasColumnType("nvarchar(max)");

                    b.Property<int>("ProjectId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("ProjectId");

                    b.ToTable("Attachment");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.EmployeeParticipate", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int>("EmployeeId")
                        .HasColumnType("int");

                    b.Property<int>("PartialTimeRatio")
                        .HasColumnType("int");

                    b.Property<int>("ProjectId")
                        .HasColumnType("int");

                    b.Property<string>("Role")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.HasIndex("EmployeeId");

                    b.HasIndex("ProjectId");

                    b.ToTable("EmployeeParticipate");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Project", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("CurrentState")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("nvarchar(max)")
                        .HasDefaultValueSql("Proposed");

                    b.Property<int?>("CustomerId")
                        .HasColumnType("int");

                    b.Property<int>("ExecuterId")
                        .HasColumnType("int");

                    b.Property<int>("ProjectManagerId")
                        .HasColumnType("int");

                    b.Property<int>("ProposerId")
                        .HasColumnType("int");

                    b.Property<int>("TeamLeaderId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("CustomerId");

                    b.HasIndex("ExecuterId");

                    b.HasIndex("ProjectManagerId");

                    b.HasIndex("ProposerId");

                    b.HasIndex("TeamLeaderId");

                    b.ToTable("Projects");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Step", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int>("CurrentCompletionRatio")
                        .HasColumnType("int");

                    b.Property<int>("ProjectId")
                        .HasColumnType("int");

                    b.Property<int>("Weight")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("ProjectId");

                    b.ToTable("Steps");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Answer", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("AnswerValue")
                        .HasColumnType("nvarchar(max)");

                    b.Property<int?>("QuestionId")
                        .HasColumnType("int");

                    b.Property<int?>("ReportResultId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("QuestionId");

                    b.HasIndex("ReportResultId");

                    b.ToTable("Answer");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Question", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("QuestionName")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Question");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Report", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("ReportName")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.ToTable("Reports");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.ReportResult", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int?>("ReportId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("ReportId");

                    b.ToTable("ReportResults");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Section", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int?>("ReportId")
                        .HasColumnType("int");

                    b.Property<string>("SectionName")
                        .HasColumnType("nvarchar(max)");

                    b.HasKey("Id");

                    b.HasIndex("ReportId");

                    b.ToTable("Section");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.EmployeeTrack", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<int>("EmployeeId")
                        .HasColumnType("int");

                    b.Property<string>("Notes")
                        .HasColumnType("nvarchar(max)");

                    b.Property<int>("TrackId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("EmployeeId");

                    b.HasIndex("TrackId");

                    b.ToTable("EmployeeTrack");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.Entities.StepTrack", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("ExecutionState")
                        .HasColumnType("nvarchar(max)");

                    b.Property<int>("OldExecutionRatio")
                        .HasColumnType("int");

                    b.Property<int>("StepId")
                        .HasColumnType("int");

                    b.Property<int>("TrackExecutionRatio")
                        .HasColumnType("int");

                    b.Property<int>("TrackId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("StepId");

                    b.HasIndex("TrackId");

                    b.ToTable("StepTracks");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.Track", b =>
                {
                    b.Property<int>("Id")
                        .ValueGeneratedOnAdd()
                        .HasColumnType("int")
                        .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                    b.Property<string>("Notes")
                        .HasColumnType("nvarchar(max)");

                    b.Property<int>("ProjectId")
                        .HasColumnType("int");

                    b.HasKey("Id");

                    b.HasIndex("ProjectId");

                    b.ToTable("Tracks");
                });

            modelBuilder.Entity("PermissionRole", b =>
                {
                    b.Property<int>("PermissionsId")
                        .HasColumnType("int");

                    b.Property<int>("RolesId")
                        .HasColumnType("int");

                    b.HasKey("PermissionsId", "RolesId");

                    b.HasIndex("RolesId");

                    b.ToTable("PermissionRole");
                });

            modelBuilder.Entity("QuestionSection", b =>
                {
                    b.Property<int>("QuestionsId")
                        .HasColumnType("int");

                    b.Property<int>("SectionsId")
                        .HasColumnType("int");

                    b.HasKey("QuestionsId", "SectionsId");

                    b.HasIndex("SectionsId");

                    b.ToTable("QuestionSection");
                });

            modelBuilder.Entity("UserRole", b =>
                {
                    b.Property<int>("RoleId")
                        .HasColumnType("int");

                    b.Property<int>("UserId")
                        .HasColumnType("int");

                    b.HasKey("RoleId", "UserId");

                    b.HasIndex("UserId");

                    b.ToTable("UserRole");

                    b.HasData(
                        new
                        {
                            RoleId = 1,
                            UserId = 1
                        });
                });

            modelBuilder.Entity("PSManagement.Domain.Customers.Entities.ContactInfo", b =>
                {
                    b.HasOne("PSManagement.Domain.Customers.Entities.Customer", null)
                        .WithMany("ContactInfo")
                        .HasForeignKey("CustomerId");
                });

            modelBuilder.Entity("PSManagement.Domain.Customers.Entities.Customer", b =>
                {
                    b.OwnsOne("PSManagement.Domain.Customers.ValueObjects.Address", "Address", b1 =>
                        {
                            b1.Property<int>("CustomerId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("City")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("City");

                            b1.Property<string>("StreetName")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("StreetName");

                            b1.Property<int>("StreetNumber")
                                .HasColumnType("int")
                                .HasColumnName("StreetNumber");

                            b1.HasKey("CustomerId");

                            b1.ToTable("Customers");

                            b1.WithOwner()
                                .HasForeignKey("CustomerId");
                        });

                    b.Navigation("Address");
                });

            modelBuilder.Entity("PSManagement.Domain.Employees.Entities.Employee", b =>
                {
                    b.HasOne("PSManagement.Domain.Employees.Entities.Department", "Department")
                        .WithMany()
                        .HasForeignKey("DepartmentId")
                        .OnDelete(DeleteBehavior.Restrict);

                    b.HasOne("PSManagement.Domain.Identity.Entities.User", "User")
                        .WithOne("Employee")
                        .HasForeignKey("PSManagement.Domain.Employees.Entities.Employee", "UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.OwnsOne("PSManagement.Domain.Employees.Entities.Availability", "Availability", b1 =>
                        {
                            b1.Property<int>("EmployeeId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<int>("CurrentWorkingHours")
                                .HasColumnType("int")
                                .HasColumnName("CurrentWorkingHours");

                            b1.Property<bool>("IsAvailable")
                                .HasColumnType("bit")
                                .HasColumnName("IsAvailable");

                            b1.HasKey("EmployeeId");

                            b1.ToTable("Employees");

                            b1.WithOwner()
                                .HasForeignKey("EmployeeId");
                        });

                    b.OwnsOne("PSManagement.Domain.Employees.Entities.PersonalInfo", "PersonalInfo", b1 =>
                        {
                            b1.Property<int>("EmployeeId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("FirstName")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("FirstName");

                            b1.Property<string>("LastName")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("LastName");

                            b1.HasKey("EmployeeId");

                            b1.ToTable("Employees");

                            b1.WithOwner()
                                .HasForeignKey("EmployeeId");
                        });

                    b.OwnsOne("PSManagement.Domain.Employees.Entities.WorkInfo", "WorkInfo", b1 =>
                        {
                            b1.Property<int>("EmployeeId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("WorkJob")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("WorkJob");

                            b1.Property<string>("WorkType")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("WorkType");

                            b1.HasKey("EmployeeId");

                            b1.ToTable("Employees");

                            b1.WithOwner()
                                .HasForeignKey("EmployeeId");
                        });

                    b.Navigation("Availability");

                    b.Navigation("Department");

                    b.Navigation("PersonalInfo");

                    b.Navigation("User");

                    b.Navigation("WorkInfo");
                });

            modelBuilder.Entity("PSManagement.Domain.FinancialSpends.Entities.FinancialSpending", b =>
                {
                    b.HasOne("PSManagement.Domain.Projects.Entities.Project", null)
                        .WithMany("FinancialSpending")
                        .HasForeignKey("ProjectId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.OwnsOne("PSManagement.SharedKernel.ValueObjects.Money", "ExternalPurchase", b1 =>
                        {
                            b1.Property<int>("FinancialSpendingId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<int>("Ammount")
                                .HasColumnType("int")
                                .HasColumnName("ExternalPurchaseAmmount");

                            b1.Property<string>("Currency")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("nvarchar(max)")
                                .HasDefaultValue("USD")
                                .HasColumnName("ExternalPurchaseCurrency");

                            b1.HasKey("FinancialSpendingId");

                            b1.ToTable("FinancialSpendings");

                            b1.WithOwner()
                                .HasForeignKey("FinancialSpendingId");
                        });

                    b.Navigation("ExternalPurchase");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Attachment", b =>
                {
                    b.HasOne("PSManagement.Domain.Projects.Entities.Project", null)
                        .WithMany("Attachments")
                        .HasForeignKey("ProjectId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.EmployeeParticipate", b =>
                {
                    b.HasOne("PSManagement.Domain.Employees.Entities.Employee", "Employee")
                        .WithMany("EmployeeParticipates")
                        .HasForeignKey("EmployeeId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Projects.Entities.Project", "Project")
                        .WithMany("EmployeeParticipates")
                        .HasForeignKey("ProjectId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.Navigation("Employee");

                    b.Navigation("Project");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Project", b =>
                {
                    b.HasOne("PSManagement.Domain.Customers.Entities.Customer", null)
                        .WithMany("Projects")
                        .HasForeignKey("CustomerId");

                    b.HasOne("PSManagement.Domain.Employees.Entities.Department", "Executer")
                        .WithMany()
                        .HasForeignKey("ExecuterId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Employees.Entities.Employee", "ProjectManager")
                        .WithMany()
                        .HasForeignKey("ProjectManagerId")
                        .OnDelete(DeleteBehavior.Restrict);

                    b.HasOne("PSManagement.Domain.Customers.Entities.Customer", "Proposer")
                        .WithMany()
                        .HasForeignKey("ProposerId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Employees.Entities.Employee", "TeamLeader")
                        .WithMany()
                        .HasForeignKey("TeamLeaderId")
                        .OnDelete(DeleteBehavior.Restrict);

                    b.OwnsOne("PSManagement.Domain.Projects.ValueObjects.Aggreement", "ProjectAggreement", b1 =>
                        {
                            b1.Property<int>("ProjectId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<DateTime>("AggreementDate")
                                .HasColumnType("datetime2")
                                .HasColumnName("AggreementDate");

                            b1.Property<int>("AggreementNumber")
                                .HasColumnType("int")
                                .HasColumnName("AggreementNumber");

                            b1.HasKey("ProjectId");

                            b1.ToTable("Projects");

                            b1.WithOwner()
                                .HasForeignKey("ProjectId");
                        });

                    b.OwnsOne("PSManagement.Domain.Projects.ValueObjects.FinancialFund", "FinancialFund", b1 =>
                        {
                            b1.Property<int>("ProjectId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("FinancialStatus")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("FinicialStatus");

                            b1.Property<string>("Source")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("FinicialSource");

                            b1.HasKey("ProjectId");

                            b1.ToTable("Projects");

                            b1.WithOwner()
                                .HasForeignKey("ProjectId");
                        });

                    b.OwnsOne("PSManagement.Domain.Projects.ValueObjects.ProjectClassification", "ProjectClassification", b1 =>
                        {
                            b1.Property<int>("ProjectId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("ProjectNature")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("ProjectNature");

                            b1.Property<string>("ProjectStatus")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("ProjectStatus");

                            b1.Property<string>("ProjectType")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("ProjectType");

                            b1.HasKey("ProjectId");

                            b1.ToTable("Projects");

                            b1.WithOwner()
                                .HasForeignKey("ProjectId");
                        });

                    b.OwnsOne("PSManagement.Domain.Projects.ValueObjects.ProjectInfo", "ProjectInfo", b1 =>
                        {
                            b1.Property<int>("ProjectId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("Code")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("Code");

                            b1.Property<string>("Description")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("Description");

                            b1.Property<DateTime>("ExpectedEndDate")
                                .HasColumnType("datetime2")
                                .HasColumnName("ExpectedEndDate");

                            b1.Property<string>("Name")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("Name");

                            b1.Property<DateTime>("StartDate")
                                .HasColumnType("datetime2")
                                .HasColumnName("StartDate");

                            b1.HasKey("ProjectId");

                            b1.ToTable("Projects");

                            b1.WithOwner()
                                .HasForeignKey("ProjectId");
                        });

                    b.OwnsOne("PSManagement.Domain.Projects.ValueObjects.ProposalInfo", "ProposalInfo", b1 =>
                        {
                            b1.Property<int>("ProjectId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<DateTime>("ProposingBookDate")
                                .HasColumnType("datetime2")
                                .HasColumnName("ProposingBookDate");

                            b1.Property<int>("ProposingBookNumber")
                                .HasColumnType("int")
                                .HasColumnName("ProposingBookNumber");

                            b1.HasKey("ProjectId");

                            b1.ToTable("Projects");

                            b1.WithOwner()
                                .HasForeignKey("ProjectId");
                        });

                    b.Navigation("Executer");

                    b.Navigation("FinancialFund");

                    b.Navigation("ProjectAggreement");

                    b.Navigation("ProjectClassification");

                    b.Navigation("ProjectInfo");

                    b.Navigation("ProjectManager");

                    b.Navigation("ProposalInfo");

                    b.Navigation("Proposer");

                    b.Navigation("TeamLeader");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Step", b =>
                {
                    b.HasOne("PSManagement.Domain.Projects.Entities.Project", "Project")
                        .WithMany("Steps")
                        .HasForeignKey("ProjectId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.OwnsOne("PSManagement.Domain.Projects.ValueObjects.StepInfo", "StepInfo", b1 =>
                        {
                            b1.Property<int>("StepId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("Description")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("Description");

                            b1.Property<int>("Duration")
                                .HasColumnType("int")
                                .HasColumnName("Duration");

                            b1.Property<DateTime>("StartDate")
                                .HasColumnType("datetime2")
                                .HasColumnName("StartDate");

                            b1.Property<string>("StepName")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("StepName");

                            b1.HasKey("StepId");

                            b1.ToTable("Steps");

                            b1.WithOwner()
                                .HasForeignKey("StepId");
                        });

                    b.Navigation("Project");

                    b.Navigation("StepInfo");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Answer", b =>
                {
                    b.HasOne("PSManagement.Domain.Reports.Entities.Question", "Question")
                        .WithMany()
                        .HasForeignKey("QuestionId");

                    b.HasOne("PSManagement.Domain.Reports.Entities.ReportResult", null)
                        .WithMany("Answers")
                        .HasForeignKey("ReportResultId");

                    b.Navigation("Question");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.ReportResult", b =>
                {
                    b.HasOne("PSManagement.Domain.Reports.Entities.Report", "Report")
                        .WithMany()
                        .HasForeignKey("ReportId");

                    b.Navigation("Report");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Section", b =>
                {
                    b.HasOne("PSManagement.Domain.Reports.Entities.Report", "Report")
                        .WithMany("Sections")
                        .HasForeignKey("ReportId");

                    b.Navigation("Report");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.EmployeeTrack", b =>
                {
                    b.HasOne("PSManagement.Domain.Employees.Entities.Employee", "Employee")
                        .WithMany("EmployeeTracks")
                        .HasForeignKey("EmployeeId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Tracking.Track", "Track")
                        .WithMany("EmployeeTracks")
                        .HasForeignKey("TrackId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.OwnsOne("PSManagement.Domain.Tracking.ValueObjects.EmployeeWork", "EmployeeWork", b1 =>
                        {
                            b1.Property<int>("EmployeeTrackId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<int>("AssignedWorkingHours")
                                .HasColumnType("int")
                                .HasColumnName("AssignedWorkingHours");

                            b1.Property<int>("ContributingRatio")
                                .HasColumnType("int")
                                .HasColumnName("ContributingRatio");

                            b1.Property<int>("WorkedHours")
                                .HasColumnType("int")
                                .HasColumnName("WorkedHours");

                            b1.HasKey("EmployeeTrackId");

                            b1.ToTable("EmployeeTrack");

                            b1.WithOwner()
                                .HasForeignKey("EmployeeTrackId");
                        });

                    b.OwnsOne("PSManagement.Domain.Tracking.ValueObjects.EmployeeWorkInfo", "EmployeeWorkInfo", b1 =>
                        {
                            b1.Property<int>("EmployeeTrackId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<string>("AssignedWork")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("AssignedWork");

                            b1.Property<DateTime>("AssignedWorkEnd")
                                .HasColumnType("datetime2")
                                .HasColumnName("AssignedWorkEnd");

                            b1.Property<string>("PerformedWork")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("PerformedWork");

                            b1.HasKey("EmployeeTrackId");

                            b1.ToTable("EmployeeTrack");

                            b1.WithOwner()
                                .HasForeignKey("EmployeeTrackId");
                        });

                    b.Navigation("Employee");

                    b.Navigation("EmployeeWork");

                    b.Navigation("EmployeeWorkInfo");

                    b.Navigation("Track");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.Entities.StepTrack", b =>
                {
                    b.HasOne("PSManagement.Domain.Projects.Entities.Step", "Step")
                        .WithMany("StepTracks")
                        .HasForeignKey("StepId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Tracking.Track", "Track")
                        .WithMany("StepTracks")
                        .HasForeignKey("TrackId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.Navigation("Step");

                    b.Navigation("Track");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.Track", b =>
                {
                    b.HasOne("PSManagement.Domain.Projects.Entities.Project", "Project")
                        .WithMany("Tracks")
                        .HasForeignKey("ProjectId")
                        .OnDelete(DeleteBehavior.Restrict)
                        .IsRequired();

                    b.OwnsOne("PSManagement.Domain.Tracking.ValueObjects.TrackInfo", "TrackInfo", b1 =>
                        {
                            b1.Property<int>("TrackId")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("int")
                                .HasAnnotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn);

                            b1.Property<bool>("IsCompleted")
                                .ValueGeneratedOnAdd()
                                .HasColumnType("bit")
                                .HasDefaultValue(false)
                                .HasColumnName("IsCompleted");

                            b1.Property<string>("StatusDescription")
                                .HasColumnType("nvarchar(max)")
                                .HasColumnName("StatusDescription");

                            b1.Property<DateTime>("TrackDate")
                                .HasColumnType("datetime2")
                                .HasColumnName("TrackDate");

                            b1.HasKey("TrackId");

                            b1.ToTable("Tracks");

                            b1.WithOwner()
                                .HasForeignKey("TrackId");
                        });

                    b.Navigation("Project");

                    b.Navigation("TrackInfo");
                });

            modelBuilder.Entity("PermissionRole", b =>
                {
                    b.HasOne("PSManagement.Domain.Identity.Entities.Permission", null)
                        .WithMany()
                        .HasForeignKey("PermissionsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Identity.Entities.Role", null)
                        .WithMany()
                        .HasForeignKey("RolesId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("QuestionSection", b =>
                {
                    b.HasOne("PSManagement.Domain.Reports.Entities.Question", null)
                        .WithMany()
                        .HasForeignKey("QuestionsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Reports.Entities.Section", null)
                        .WithMany()
                        .HasForeignKey("SectionsId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("UserRole", b =>
                {
                    b.HasOne("PSManagement.Domain.Identity.Entities.Role", null)
                        .WithMany()
                        .HasForeignKey("RoleId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();

                    b.HasOne("PSManagement.Domain.Identity.Entities.User", null)
                        .WithMany()
                        .HasForeignKey("UserId")
                        .OnDelete(DeleteBehavior.Cascade)
                        .IsRequired();
                });

            modelBuilder.Entity("PSManagement.Domain.Customers.Entities.Customer", b =>
                {
                    b.Navigation("ContactInfo");

                    b.Navigation("Projects");
                });

            modelBuilder.Entity("PSManagement.Domain.Employees.Entities.Employee", b =>
                {
                    b.Navigation("EmployeeParticipates");

                    b.Navigation("EmployeeTracks");
                });

            modelBuilder.Entity("PSManagement.Domain.Identity.Entities.User", b =>
                {
                    b.Navigation("Employee");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Project", b =>
                {
                    b.Navigation("Attachments");

                    b.Navigation("EmployeeParticipates");

                    b.Navigation("FinancialSpending");

                    b.Navigation("Steps");

                    b.Navigation("Tracks");
                });

            modelBuilder.Entity("PSManagement.Domain.Projects.Entities.Step", b =>
                {
                    b.Navigation("StepTracks");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.Report", b =>
                {
                    b.Navigation("Sections");
                });

            modelBuilder.Entity("PSManagement.Domain.Reports.Entities.ReportResult", b =>
                {
                    b.Navigation("Answers");
                });

            modelBuilder.Entity("PSManagement.Domain.Tracking.Track", b =>
                {
                    b.Navigation("EmployeeTracks");

                    b.Navigation("StepTracks");
                });
#pragma warning restore 612, 618
        }
    }
}
