diff --git a/backend/Infrastructure/Migrations/20250108122732_AddForecast.Designer.cs b/backend/Infrastructure/Migrations/20250108122732_AddForecast.Designer.cs
new file mode 100644
index 00000000..288f4022
--- /dev/null
+++ b/backend/Infrastructure/Migrations/20250108122732_AddForecast.Designer.cs
@@ -0,0 +1,671 @@
+//
+using System;
+using Infrastructure.DatabaseContext;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace Infrastructure.Migrations
+{
+ [DbContext(typeof(ApplicationContext))]
+ [Migration("20250108122732_AddForecast")]
+ partial class AddForecast
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "7.0.10")
+ .HasAnnotation("Relational:MaxIdentifierLength", 128);
+
+ SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder);
+
+ modelBuilder.Entity("Core.Absences.Absence", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ExcludeFromBillRate")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("OrganizationId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("Absence");
+ });
+
+ modelBuilder.Entity("Core.Agreements.Agreement", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("CustomerId")
+ .HasColumnType("int");
+
+ b.Property("EndDate")
+ .HasColumnType("datetime2");
+
+ b.Property("EngagementId")
+ .HasColumnType("int");
+
+ b.Property("Name")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NextPriceAdjustmentDate")
+ .HasColumnType("datetime2");
+
+ b.Property("Notes")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("Options")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PriceAdjustmentIndex")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("PriceAdjustmentProcess")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("StartDate")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CustomerId");
+
+ b.HasIndex("EngagementId");
+
+ b.ToTable("Agreements");
+ });
+
+ modelBuilder.Entity("Core.Consultants.Competence", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Competence");
+
+ b.HasData(
+ new
+ {
+ Id = "frontend",
+ Name = "Frontend"
+ },
+ new
+ {
+ Id = "backend",
+ Name = "Backend"
+ },
+ new
+ {
+ Id = "design",
+ Name = "Design"
+ },
+ new
+ {
+ Id = "project-mgmt",
+ Name = "Project Management"
+ },
+ new
+ {
+ Id = "development",
+ Name = "Utvikling"
+ });
+ });
+
+ modelBuilder.Entity("Core.Consultants.CompetenceConsultant", b =>
+ {
+ b.Property("ConsultantId")
+ .HasColumnType("int");
+
+ b.Property("CompetencesId")
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("ConsultantId", "CompetencesId");
+
+ b.HasIndex("CompetencesId");
+
+ b.ToTable("CompetenceConsultant");
+ });
+
+ modelBuilder.Entity("Core.Consultants.Consultant", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("Degree")
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("DepartmentId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Email")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("EndDate")
+ .HasColumnType("datetime2");
+
+ b.Property("GraduationYear")
+ .HasColumnType("int");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("StartDate")
+ .HasColumnType("datetime2");
+
+ b.Property("TransferredVacationDays")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int")
+ .HasDefaultValue(0);
+
+ b.HasKey("Id");
+
+ b.HasIndex("DepartmentId");
+
+ b.ToTable("Consultant");
+
+ b.HasData(
+ new
+ {
+ Id = 1,
+ Degree = "Master",
+ DepartmentId = "trondheim",
+ Email = "j@variant.no",
+ GraduationYear = 2019,
+ Name = "Jonas",
+ StartDate = new DateTime(2020, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified)
+ });
+ });
+
+ modelBuilder.Entity("Core.Customers.Customer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("IsActive")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("OrganizationId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId", "Name", "IsActive")
+ .IsUnique();
+
+ b.ToTable("Customer");
+ });
+
+ modelBuilder.Entity("Core.Engagements.Engagement", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("CustomerId")
+ .HasColumnType("int");
+
+ b.Property("IsBillable")
+ .HasColumnType("bit");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("State")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("CustomerId", "Name")
+ .IsUnique();
+
+ b.ToTable("Project");
+ });
+
+ modelBuilder.Entity("Core.Forecasts.Forecast", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("AdjustedValue")
+ .HasColumnType("int");
+
+ b.Property("ConsultantId")
+ .HasColumnType("int");
+
+ b.Property("MonthYear")
+ .HasColumnType("datetime2");
+
+ b.Property("OriginalValue")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ConsultantId");
+
+ b.ToTable("Forecasts");
+ });
+
+ modelBuilder.Entity("Core.Organizations.Department", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Hotkey")
+ .HasColumnType("int");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("OrganizationId")
+ .IsRequired()
+ .HasColumnType("nvarchar(450)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("OrganizationId");
+
+ b.ToTable("Department");
+
+ b.HasData(
+ new
+ {
+ Id = "trondheim",
+ Name = "Trondheim",
+ OrganizationId = "variant-as"
+ });
+ });
+
+ modelBuilder.Entity("Core.Organizations.Organization", b =>
+ {
+ b.Property("Id")
+ .HasColumnType("nvarchar(450)");
+
+ b.Property("Country")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("HasVacationInChristmas")
+ .HasColumnType("bit");
+
+ b.Property("HoursPerWorkday")
+ .HasColumnType("float");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.Property("NumberOfVacationDaysInYear")
+ .HasColumnType("int");
+
+ b.Property("UrlKey")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b.HasKey("Id");
+
+ b.ToTable("Organization");
+
+ b.HasData(
+ new
+ {
+ Id = "variant-as",
+ Country = "norway",
+ HasVacationInChristmas = true,
+ HoursPerWorkday = 7.5,
+ Name = "Variant AS",
+ NumberOfVacationDaysInYear = 25,
+ UrlKey = "variant-as"
+ });
+ });
+
+ modelBuilder.Entity("Core.PlannedAbsences.PlannedAbsence", b =>
+ {
+ b.Property("AbsenceId")
+ .HasColumnType("int");
+
+ b.Property("ConsultantId")
+ .HasColumnType("int");
+
+ b.Property("Week")
+ .HasColumnType("int");
+
+ b.Property("Hours")
+ .HasColumnType("float");
+
+ b.HasKey("AbsenceId", "ConsultantId", "Week");
+
+ b.HasIndex("ConsultantId");
+
+ b.ToTable("PlannedAbsence");
+ });
+
+ modelBuilder.Entity("Core.Staffings.Staffing", b =>
+ {
+ b.Property("EngagementId")
+ .HasColumnType("int");
+
+ b.Property("ConsultantId")
+ .HasColumnType("int");
+
+ b.Property("Week")
+ .HasColumnType("int");
+
+ b.Property("Hours")
+ .HasColumnType("float");
+
+ b.HasKey("EngagementId", "ConsultantId", "Week");
+
+ b.HasIndex("ConsultantId");
+
+ b.ToTable("Staffing");
+ });
+
+ modelBuilder.Entity("Core.Vacations.Vacation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("ConsultantId")
+ .HasColumnType("int");
+
+ b.Property("Date")
+ .HasColumnType("datetime2");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ConsultantId");
+
+ b.ToTable("Vacation");
+ });
+
+ modelBuilder.Entity("Core.Absences.Absence", b =>
+ {
+ b.HasOne("Core.Organizations.Organization", "Organization")
+ .WithMany("AbsenceTypes")
+ .HasForeignKey("OrganizationId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Organization");
+ });
+
+ modelBuilder.Entity("Core.Agreements.Agreement", b =>
+ {
+ b.HasOne("Core.Customers.Customer", "Customer")
+ .WithMany("Agreements")
+ .HasForeignKey("CustomerId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.HasOne("Core.Engagements.Engagement", "Engagement")
+ .WithMany("Agreements")
+ .HasForeignKey("EngagementId")
+ .OnDelete(DeleteBehavior.Restrict);
+
+ b.OwnsMany("Core.Agreements.FileReference", "Files", b1 =>
+ {
+ b1.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b1.Property("Id"));
+
+ b1.Property("AgreementId")
+ .HasColumnType("int");
+
+ b1.Property("BlobName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("FileName")
+ .IsRequired()
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("UploadedBy")
+ .HasColumnType("nvarchar(max)");
+
+ b1.Property("UploadedOn")
+ .HasColumnType("datetime2");
+
+ b1.HasKey("Id");
+
+ b1.HasIndex("AgreementId");
+
+ b1.ToTable("FileReference");
+
+ b1.WithOwner()
+ .HasForeignKey("AgreementId");
+ });
+
+ b.Navigation("Customer");
+
+ b.Navigation("Engagement");
+
+ b.Navigation("Files");
+ });
+
+ modelBuilder.Entity("Core.Consultants.CompetenceConsultant", b =>
+ {
+ b.HasOne("Core.Consultants.Competence", "Competence")
+ .WithMany("CompetenceConsultant")
+ .HasForeignKey("CompetencesId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("Core.Consultants.Consultant", "Consultant")
+ .WithMany("CompetenceConsultant")
+ .HasForeignKey("ConsultantId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Competence");
+
+ b.Navigation("Consultant");
+ });
+
+ modelBuilder.Entity("Core.Consultants.Consultant", b =>
+ {
+ b.HasOne("Core.Organizations.Department", "Department")
+ .WithMany("Consultants")
+ .HasForeignKey("DepartmentId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Department");
+ });
+
+ modelBuilder.Entity("Core.Customers.Customer", b =>
+ {
+ b.HasOne("Core.Organizations.Organization", "Organization")
+ .WithMany("Customers")
+ .HasForeignKey("OrganizationId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Organization");
+ });
+
+ modelBuilder.Entity("Core.Engagements.Engagement", b =>
+ {
+ b.HasOne("Core.Customers.Customer", "Customer")
+ .WithMany("Projects")
+ .HasForeignKey("CustomerId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Customer");
+ });
+
+ modelBuilder.Entity("Core.Forecasts.Forecast", b =>
+ {
+ b.HasOne("Core.Consultants.Consultant", "Consultant")
+ .WithMany("Forecasts")
+ .HasForeignKey("ConsultantId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Consultant");
+ });
+
+ modelBuilder.Entity("Core.Organizations.Department", b =>
+ {
+ b.HasOne("Core.Organizations.Organization", "Organization")
+ .WithMany("Departments")
+ .HasForeignKey("OrganizationId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Organization");
+ });
+
+ modelBuilder.Entity("Core.PlannedAbsences.PlannedAbsence", b =>
+ {
+ b.HasOne("Core.Absences.Absence", "Absence")
+ .WithMany()
+ .HasForeignKey("AbsenceId")
+ .OnDelete(DeleteBehavior.ClientCascade)
+ .IsRequired();
+
+ b.HasOne("Core.Consultants.Consultant", "Consultant")
+ .WithMany("PlannedAbsences")
+ .HasForeignKey("ConsultantId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Absence");
+
+ b.Navigation("Consultant");
+ });
+
+ modelBuilder.Entity("Core.Staffings.Staffing", b =>
+ {
+ b.HasOne("Core.Consultants.Consultant", "Consultant")
+ .WithMany("Staffings")
+ .HasForeignKey("ConsultantId")
+ .OnDelete(DeleteBehavior.ClientCascade)
+ .IsRequired();
+
+ b.HasOne("Core.Engagements.Engagement", "Engagement")
+ .WithMany("Staffings")
+ .HasForeignKey("EngagementId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Consultant");
+
+ b.Navigation("Engagement");
+ });
+
+ modelBuilder.Entity("Core.Vacations.Vacation", b =>
+ {
+ b.HasOne("Core.Consultants.Consultant", "Consultant")
+ .WithMany("Vacations")
+ .HasForeignKey("ConsultantId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Consultant");
+ });
+
+ modelBuilder.Entity("Core.Consultants.Competence", b =>
+ {
+ b.Navigation("CompetenceConsultant");
+ });
+
+ modelBuilder.Entity("Core.Consultants.Consultant", b =>
+ {
+ b.Navigation("CompetenceConsultant");
+
+ b.Navigation("Forecasts");
+
+ b.Navigation("PlannedAbsences");
+
+ b.Navigation("Staffings");
+
+ b.Navigation("Vacations");
+ });
+
+ modelBuilder.Entity("Core.Customers.Customer", b =>
+ {
+ b.Navigation("Agreements");
+
+ b.Navigation("Projects");
+ });
+
+ modelBuilder.Entity("Core.Engagements.Engagement", b =>
+ {
+ b.Navigation("Agreements");
+
+ b.Navigation("Staffings");
+ });
+
+ modelBuilder.Entity("Core.Organizations.Department", b =>
+ {
+ b.Navigation("Consultants");
+ });
+
+ modelBuilder.Entity("Core.Organizations.Organization", b =>
+ {
+ b.Navigation("AbsenceTypes");
+
+ b.Navigation("Customers");
+
+ b.Navigation("Departments");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/backend/Infrastructure/Migrations/20250108122732_AddForecast.cs b/backend/Infrastructure/Migrations/20250108122732_AddForecast.cs
new file mode 100644
index 00000000..5fbdb1d9
--- /dev/null
+++ b/backend/Infrastructure/Migrations/20250108122732_AddForecast.cs
@@ -0,0 +1,69 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace Infrastructure.Migrations
+{
+ ///
+ public partial class AddForecast : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropIndex(
+ name: "IX_Customer_OrganizationId_Name",
+ table: "Customer");
+
+ migrationBuilder.CreateTable(
+ name: "Forecasts",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ ConsultantId = table.Column(type: "int", nullable: false),
+ MonthYear = table.Column(type: "datetime2", nullable: false),
+ OriginalValue = table.Column(type: "int", nullable: false),
+ AdjustedValue = table.Column(type: "int", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Forecasts", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Forecasts_Consultant_ConsultantId",
+ column: x => x.ConsultantId,
+ principalTable: "Consultant",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Customer_OrganizationId_Name_IsActive",
+ table: "Customer",
+ columns: new[] { "OrganizationId", "Name", "IsActive" },
+ unique: true);
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Forecasts_ConsultantId",
+ table: "Forecasts",
+ column: "ConsultantId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Forecasts");
+
+ migrationBuilder.DropIndex(
+ name: "IX_Customer_OrganizationId_Name_IsActive",
+ table: "Customer");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Customer_OrganizationId_Name",
+ table: "Customer",
+ columns: new[] { "OrganizationId", "Name" },
+ unique: true);
+ }
+ }
+}
diff --git a/backend/Infrastructure/Migrations/ApplicationContextModelSnapshot.cs b/backend/Infrastructure/Migrations/ApplicationContextModelSnapshot.cs
index d5f79f58..ea3492c3 100644
--- a/backend/Infrastructure/Migrations/ApplicationContextModelSnapshot.cs
+++ b/backend/Infrastructure/Migrations/ApplicationContextModelSnapshot.cs
@@ -45,7 +45,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("OrganizationId");
- b.ToTable("Absence", (string)null);
+ b.ToTable("Absence");
});
modelBuilder.Entity("Core.Agreements.Agreement", b =>
@@ -92,7 +92,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("EngagementId");
- b.ToTable("Agreements", (string)null);
+ b.ToTable("Agreements");
});
modelBuilder.Entity("Core.Consultants.Competence", b =>
@@ -106,7 +106,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasKey("Id");
- b.ToTable("Competence", (string)null);
+ b.ToTable("Competence");
b.HasData(
new
@@ -148,7 +148,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("CompetencesId");
- b.ToTable("CompetenceConsultant", (string)null);
+ b.ToTable("CompetenceConsultant");
});
modelBuilder.Entity("Core.Consultants.Consultant", b =>
@@ -192,7 +192,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("DepartmentId");
- b.ToTable("Consultant", (string)null);
+ b.ToTable("Consultant");
b.HasData(
new
@@ -228,10 +228,10 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasKey("Id");
- b.HasIndex("OrganizationId", "Name")
+ b.HasIndex("OrganizationId", "Name", "IsActive")
.IsUnique();
- b.ToTable("Customer", (string)null);
+ b.ToTable("Customer");
});
modelBuilder.Entity("Core.Engagements.Engagement", b =>
@@ -261,7 +261,34 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("CustomerId", "Name")
.IsUnique();
- b.ToTable("Project", (string)null);
+ b.ToTable("Project");
+ });
+
+ modelBuilder.Entity("Core.Forecasts.Forecast", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("int");
+
+ SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id"));
+
+ b.Property("AdjustedValue")
+ .HasColumnType("int");
+
+ b.Property("ConsultantId")
+ .HasColumnType("int");
+
+ b.Property("MonthYear")
+ .HasColumnType("datetime2");
+
+ b.Property("OriginalValue")
+ .HasColumnType("int");
+
+ b.HasKey("Id");
+
+ b.HasIndex("ConsultantId");
+
+ b.ToTable("Forecasts");
});
modelBuilder.Entity("Core.Organizations.Department", b =>
@@ -285,7 +312,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("OrganizationId");
- b.ToTable("Department", (string)null);
+ b.ToTable("Department");
b.HasData(
new
@@ -324,7 +351,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasKey("Id");
- b.ToTable("Organization", (string)null);
+ b.ToTable("Organization");
b.HasData(
new
@@ -357,7 +384,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("ConsultantId");
- b.ToTable("PlannedAbsence", (string)null);
+ b.ToTable("PlannedAbsence");
});
modelBuilder.Entity("Core.Staffings.Staffing", b =>
@@ -378,7 +405,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("ConsultantId");
- b.ToTable("Staffing", (string)null);
+ b.ToTable("Staffing");
});
modelBuilder.Entity("Core.Vacations.Vacation", b =>
@@ -399,7 +426,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.HasIndex("ConsultantId");
- b.ToTable("Vacation", (string)null);
+ b.ToTable("Vacation");
});
modelBuilder.Entity("Core.Absences.Absence", b =>
@@ -425,7 +452,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
.HasForeignKey("EngagementId")
.OnDelete(DeleteBehavior.Restrict);
- b.OwnsMany("Core.Agreements.Agreement.Files#Core.Agreements.FileReference", "Files", b1 =>
+ b.OwnsMany("Core.Agreements.FileReference", "Files", b1 =>
{
b1.Property("Id")
.ValueGeneratedOnAdd()
@@ -454,7 +481,7 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b1.HasIndex("AgreementId");
- b1.ToTable("FileReference", (string)null);
+ b1.ToTable("FileReference");
b1.WithOwner()
.HasForeignKey("AgreementId");
@@ -519,6 +546,17 @@ protected override void BuildModel(ModelBuilder modelBuilder)
b.Navigation("Customer");
});
+ modelBuilder.Entity("Core.Forecasts.Forecast", b =>
+ {
+ b.HasOne("Core.Consultants.Consultant", "Consultant")
+ .WithMany("Forecasts")
+ .HasForeignKey("ConsultantId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.Navigation("Consultant");
+ });
+
modelBuilder.Entity("Core.Organizations.Department", b =>
{
b.HasOne("Core.Organizations.Organization", "Organization")
@@ -588,6 +626,8 @@ protected override void BuildModel(ModelBuilder modelBuilder)
{
b.Navigation("CompetenceConsultant");
+ b.Navigation("Forecasts");
+
b.Navigation("PlannedAbsences");
b.Navigation("Staffings");