diff --git a/src/Client/Pages/Configuration/Components/AddUserDialog.razor b/src/Client/Pages/Configuration/Components/AddUserDialog.razor index 61b789cb..1c1c7c62 100644 --- a/src/Client/Pages/Configuration/Components/AddUserDialog.razor +++ b/src/Client/Pages/Configuration/Components/AddUserDialog.razor @@ -6,7 +6,7 @@ @if (Functions != null) { - + @foreach (var function in Functions.Where(x => !x.TrainingOnly).OrderBy(x => x.Order)) { diff --git a/src/Client/Pages/Configuration/Components/MonthItemDialog.razor b/src/Client/Pages/Configuration/Components/MonthItemDialog.razor index e079c133..aa29c3ff 100644 --- a/src/Client/Pages/Configuration/Components/MonthItemDialog.razor +++ b/src/Client/Pages/Configuration/Components/MonthItemDialog.razor @@ -2,7 +2,7 @@ @if (MonthItem is not null) { - + @L["Normal"] @L["Info"] diff --git a/src/Client/Pages/Configuration/UserRolesEdit.razor b/src/Client/Pages/Configuration/UserRolesEdit.razor index a74a2dc7..f3464ef2 100644 --- a/src/Client/Pages/Configuration/UserRolesEdit.razor +++ b/src/Client/Pages/Configuration/UserRolesEdit.razor @@ -45,6 +45,8 @@ Changes to this file may cause incorrect behavior and will be lost if the code i + @L["Mail"] + @L["Global"] diff --git a/src/Client/Pages/Dashboard/Index.razor b/src/Client/Pages/Dashboard/Index.razor index 87a59dba..249cac59 100644 --- a/src/Client/Pages/Dashboard/Index.razor +++ b/src/Client/Pages/Dashboard/Index.razor @@ -29,8 +29,13 @@ var color = DayItemHelper.DayItemTypeColor(item.Type);
- - + + + @if (item.DateEnd is not null && !item.DateEnd.Equals(item.DateStart)) + { +
-
+ + } @item.Text
@@ -47,7 +52,7 @@ @foreach (var training in _pinnedTrainings) {
- +
} @@ -55,10 +60,10 @@ } else if (_loading) { - - - - + + + + } @L["Future trainings"] @if (_trainings?.Trainings != null) @@ -69,7 +74,7 @@ @foreach (var training in _trainings.Trainings) {
- +
} @@ -85,10 +90,10 @@ } else if (_loading) { - - - - + + + + } @if (_futureHolidays != null) @@ -113,18 +118,18 @@ @L["hui.nu QR code"] - + - + - + - + diff --git a/src/Client/Pages/User/Components/GroupDialog.razor b/src/Client/Pages/User/Components/GroupDialog.razor index 31e86ee2..68d70bef 100644 --- a/src/Client/Pages/User/Components/GroupDialog.razor +++ b/src/Client/Pages/User/Components/GroupDialog.razor @@ -2,7 +2,7 @@ @if (DefaultGroup is not null) { - + } diff --git a/src/Client/Pages/User/Components/VacationAdd.razor b/src/Client/Pages/User/Components/VacationAdd.razor index 91875a8d..6fcc0ea6 100644 --- a/src/Client/Pages/User/Components/VacationAdd.razor +++ b/src/Client/Pages/User/Components/VacationAdd.razor @@ -9,7 +9,7 @@ { @_error } - + diff --git a/src/Client/Pages/User/Profile.razor b/src/Client/Pages/User/Profile.razor index b7fcf5af..3526b3ca 100644 --- a/src/Client/Pages/User/Profile.razor +++ b/src/Client/Pages/User/Profile.razor @@ -13,10 +13,25 @@ } -

@L["Client version:"] @DefaultSettingsHelper.CURRENT_VERSION

- @if (_updateDetails is not null) - { -

@L["Server version:"] @_updateDetails.CurrentVersion

- } + + + + + + + @if (_updateDetails is not null) + { + + + + + } + +
@L["Client version:"]@DefaultSettingsHelper.CURRENT_VERSION
@L["Server version:"]@_updateDetails.CurrentVersion
+ + + @L["Mails to invite to your trainings"] + + \ No newline at end of file diff --git a/src/Client/Resources/Pages/User/Profile.en-US.resx b/src/Client/Resources/Pages/User/Profile.en-US.resx index 64eaaae4..8394100e 100644 --- a/src/Client/Resources/Pages/User/Profile.en-US.resx +++ b/src/Client/Resources/Pages/User/Profile.en-US.resx @@ -23,4 +23,7 @@ Setting training to calendar + + Mails to invite to your trainings + \ No newline at end of file diff --git a/src/Client/Resources/Pages/User/Profile.nl-NL.resx b/src/Client/Resources/Pages/User/Profile.nl-NL.resx index 0d506e38..ec6b246a 100644 --- a/src/Client/Resources/Pages/User/Profile.nl-NL.resx +++ b/src/Client/Resources/Pages/User/Profile.nl-NL.resx @@ -30,4 +30,7 @@ Instelling training naar calender + + Mails die worden uitgenodigd tot jouw oefeningen + \ No newline at end of file diff --git a/src/Client/Shared/Layout/CultureSelector.razor b/src/Client/Shared/Layout/CultureSelector.razor index efa4ba33..44d03567 100644 --- a/src/Client/Shared/Layout/CultureSelector.razor +++ b/src/Client/Shared/Layout/CultureSelector.razor @@ -5,12 +5,12 @@

diff --git a/src/Client/wwwroot/robots.txt b/src/Client/wwwroot/robots.txt new file mode 100644 index 00000000..916b3bb5 --- /dev/null +++ b/src/Client/wwwroot/robots.txt @@ -0,0 +1,3 @@ +User-agent: * +User-agent: AdsBot-Google +Disallow: / \ No newline at end of file diff --git a/src/ClientGenerator/Clients/UserLinkedMailsClient.g.cs b/src/ClientGenerator/Clients/UserLinkedMailsClient.g.cs new file mode 100644 index 00000000..bb77dc6a --- /dev/null +++ b/src/ClientGenerator/Clients/UserLinkedMailsClient.g.cs @@ -0,0 +1,42 @@ +//---------------------- +// +// Generated using the NSwag toolchain v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) +// +//---------------------- + +#pragma warning disable 108 // Disable "CS0108 '{derivedDto}.ToJson()' hides inherited member '{dtoBase}.ToJson()'. Use the new keyword if hiding was intended." +#pragma warning disable 114 // Disable "CS0114 '{derivedDto}.RaisePropertyChanged(String)' hides inherited member 'dtoBase.RaisePropertyChanged(String)'. To make the current member override that implementation, add the override keyword. Otherwise add the new keyword." +#pragma warning disable 472 // Disable "CS0472 The result of the expression is always 'false' since a value of type 'Int32' is never equal to 'null' of type 'Int32?' +#pragma warning disable 612 // Disable "CS0612 '...' is obsolete" +#pragma warning disable 649 // Disable "CS0649 Field is never assigned to, and will always have its default value null" +#pragma warning disable 1573 // Disable "CS1573 Parameter '...' has no matching param tag in the XML comment for ... +#pragma warning disable 1591 // Disable "CS1591 Missing XML comment for publicly visible type or member ..." +#pragma warning disable 8073 // Disable "CS8073 The result of the expression is always 'false' since a value of type 'T' is never equal to 'null' of type 'T?'" +#pragma warning disable 3016 // Disable "CS3016 Arrays as attribute arguments is not CLS-compliant" +#pragma warning disable 8603 // Disable "CS8603 Possible null reference return" +#pragma warning disable 8604 // Disable "CS8604 Possible null reference argument for parameter" +#pragma warning disable 8625 // Disable "CS8625 Cannot convert null literal to non-nullable reference type" +#pragma warning disable 8765 // Disable "CS8765 Nullability of type of parameter doesn't match overridden member (possibly because of nullability attributes)." + +namespace Drogecode.Knrm.Oefenrooster.ClientGenerator.Client +{ + using System = global::System; + + + + + + +} + +#pragma warning restore 108 +#pragma warning restore 114 +#pragma warning restore 472 +#pragma warning restore 612 +#pragma warning restore 1573 +#pragma warning restore 1591 +#pragma warning restore 8073 +#pragma warning restore 3016 +#pragma warning restore 8603 +#pragma warning restore 8604 +#pragma warning restore 8625 \ No newline at end of file diff --git a/src/ClientGenerator/Drogecode.Knrm.Oefenrooster.ClientGenerator.csproj b/src/ClientGenerator/Drogecode.Knrm.Oefenrooster.ClientGenerator.csproj index 0121efbc..ca8873c6 100644 --- a/src/ClientGenerator/Drogecode.Knrm.Oefenrooster.ClientGenerator.csproj +++ b/src/ClientGenerator/Drogecode.Knrm.Oefenrooster.ClientGenerator.csproj @@ -71,6 +71,10 @@ ../Clients/UserClient.g.cs /GenerateClientInterfaces:true /GenerateDtoTypes:false /UseBaseUrl:false /AdditionalNamespaceUsages:Drogecode.Knrm.Oefenrooster.Shared.Models.User + + ../Clients/UserLinkedMailsClient.g.cs + /GenerateClientInterfaces:true /GenerateDtoTypes:false /UseBaseUrl:false + ../Clients/UserRoleClient.g.cs /GenerateClientInterfaces:true /GenerateDtoTypes:false /UseBaseUrl:false /AdditionalNamespaceUsages:Drogecode.Knrm.Oefenrooster.Shared.Models.UserRole diff --git a/src/ClientGenerator/OpenAPIs/Audit.json b/src/ClientGenerator/OpenAPIs/Audit.json index 44d24b60..104b169c 100644 --- a/src/ClientGenerator/OpenAPIs/Audit.json +++ b/src/ClientGenerator/OpenAPIs/Audit.json @@ -171,7 +171,8 @@ 6, 7, 8, - 9 + 9, + 10 ], "type": "integer", "format": "int32" diff --git a/src/ClientGenerator/OpenAPIs/MonthItem.json b/src/ClientGenerator/OpenAPIs/MonthItem.json index 6d5c6d71..2ad330d1 100644 --- a/src/ClientGenerator/OpenAPIs/MonthItem.json +++ b/src/ClientGenerator/OpenAPIs/MonthItem.json @@ -418,6 +418,8 @@ "$ref": "#/components/schemas/Severity" }, "text": { + "maxLength": 150, + "minLength": 0, "type": "string", "nullable": true }, diff --git a/src/ClientGenerator/OpenAPIs/UserLinkedMails.json b/src/ClientGenerator/OpenAPIs/UserLinkedMails.json new file mode 100644 index 00000000..4fec79f0 --- /dev/null +++ b/src/ClientGenerator/OpenAPIs/UserLinkedMails.json @@ -0,0 +1,9 @@ +{ + "openapi": "3.0.1", + "info": { + "title": "UserLinkedMails", + "version": "v1" + }, + "paths": { }, + "components": { } +} \ No newline at end of file diff --git a/src/ClientGenerator/OpenAPIs/UserRole.json b/src/ClientGenerator/OpenAPIs/UserRole.json index 2e254333..51f1bb16 100644 --- a/src/ClientGenerator/OpenAPIs/UserRole.json +++ b/src/ClientGenerator/OpenAPIs/UserRole.json @@ -221,6 +221,12 @@ "autH_scheduler_other_user": { "type": "boolean" }, + "autH_scheduler_description_edit": { + "type": "boolean" + }, + "autH_scheduler_description_read": { + "type": "boolean" + }, "autH_users_details": { "type": "boolean" }, @@ -245,6 +251,9 @@ "autH_dashboard_qr": { "type": "boolean" }, + "autH_mail_invite_external": { + "type": "boolean" + }, "autH_show_c_footer": { "type": "boolean" } diff --git a/src/Server/Controllers/UserController.cs b/src/Server/Controllers/UserController.cs index 58950182..f34857a5 100644 --- a/src/Server/Controllers/UserController.cs +++ b/src/Server/Controllers/UserController.cs @@ -211,7 +211,7 @@ public async Task> SyncAllUsers(CancellationT var a = await _userService.UpdateUser(newUserResponse, userId, customerId); } } - if (users.OdataNextLink != null) + if (users.OdataNextLink is not null) users = await _graphService.NextUsersPage(users); else break; } diff --git a/src/Server/Controllers/UserLinkedMailsController.cs b/src/Server/Controllers/UserLinkedMailsController.cs new file mode 100644 index 00000000..5f318bd3 --- /dev/null +++ b/src/Server/Controllers/UserLinkedMailsController.cs @@ -0,0 +1,30 @@ +using Drogecode.Knrm.Oefenrooster.Server.Hubs; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Identity.Web.Resource; + +namespace Drogecode.Knrm.Oefenrooster.Server.Controllers; + +[Authorize] +[ApiController] +[Route("api/[controller]")] +[ApiExplorerSettings(GroupName = "UserLinkedMails")] +public class UserLinkedMailsController +{ + private readonly ILogger _logger; + private readonly IUserService _userService; + private readonly IAuditService _auditService; + private readonly IGraphService _graphService; + private readonly IFunctionService _functionService; + private readonly RefreshHub _refreshHub; + + public UserLinkedMailsController(ILogger logger, IUserService userService, IAuditService auditService, IGraphService graphService, IFunctionService functionService, RefreshHub refreshHub) + { + _logger = logger; + _userService = userService; + _auditService = auditService; + _graphService = graphService; + _functionService = functionService; + _refreshHub = refreshHub; + } +} \ No newline at end of file diff --git a/src/Server/Database/DataContext.cs b/src/Server/Database/DataContext.cs index 0a1b40c7..f139d86f 100644 --- a/src/Server/Database/DataContext.cs +++ b/src/Server/Database/DataContext.cs @@ -20,6 +20,7 @@ public class DataContext : DbContext, IDataProtectionKeyContext public DbSet UserHolidays { get; set; } public DbSet UserOnVersions { get; set; } public DbSet UserSettings { get; set; } + public DbSet UserLinkedMails { get; set; } public DbSet Customers { get; set; } public DbSet CustomerSettings { get; set; } public DbSet RoosterDefaults { get; set; } @@ -110,6 +111,11 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) modelBuilder.Entity(e => { e.Property(en => en.Id).IsRequired(); }); modelBuilder.Entity().HasOne(p => p.Customer).WithMany(g => g.UserSettings).HasForeignKey(s => s.CustomerId).IsRequired(); modelBuilder.Entity().HasOne(p => p.User).WithMany(g => g.UserSettings).HasForeignKey(s => s.UserId).IsRequired(); + + //UserLinkedMails + modelBuilder.Entity(e => { e.Property(en => en.Id).IsRequired(); }); + modelBuilder.Entity().HasOne(p => p.Customer).WithMany(g => g.UserLinkedMails).HasForeignKey(s => s.CustomerId).IsRequired(); + modelBuilder.Entity().HasOne(p => p.User).WithMany(g => g.UserLinkedMails).HasForeignKey(s => s.UserId).IsRequired(); // Rooster available modelBuilder.Entity(e => { e.Property(en => en.Id).IsRequired(); }); diff --git a/src/Server/Database/Migrations/20240921152744_AddUserExternalId.Designer.cs b/src/Server/Database/Migrations/20240921152744_AddUserExternalId.Designer.cs new file mode 100644 index 00000000..1c009a1e --- /dev/null +++ b/src/Server/Database/Migrations/20240921152744_AddUserExternalId.Designer.cs @@ -0,0 +1,2625 @@ +// +using System; +using System.Collections.Generic; +using Drogecode.Knrm.Oefenrooster.Server.Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace Drogecode.Knrm.Oefenrooster.Server.Database.Migrations +{ + [DbContext(typeof(DataContext))] + [Migration("20240921152744_AddUserExternalId")] + partial class AddUserExternalId + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.8") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbAudit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AuditType") + .HasColumnType("integer"); + + b.Property("Created") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .IsRequired() + .HasColumnType("uuid"); + + b.Property("Note") + .HasColumnType("text"); + + b.Property("ObjectKey") + .HasColumnType("uuid"); + + b.Property("ObjectName") + .HasColumnType("text"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("Audit"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomerSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Setting") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Value") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("CustomerSettings"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ClientIdLogin") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientIdServer") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientSecretLogin") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientSecretServer") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Created") + .HasColumnType("timestamp with time zone"); + + b.Property("Domain") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Instance") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("TenantId") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("TimeZone") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.HasKey("Id"); + + b.ToTable("Customers"); + + b.HasData( + new + { + Id = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ClientIdLogin = "a9c68159-901c-449a-83e0-85243364e3cc", + ClientIdServer = "220e1008-1131-4e82-a388-611cd773ddf8", + ClientSecretLogin = "", + ClientSecretServer = "", + Created = new DateTime(2022, 10, 12, 18, 12, 5, 0, DateTimeKind.Utc), + Domain = "hui.nu", + Instance = "https://login.microsoftonline.com/", + Name = "KNRM Huizen", + TenantId = "d9754755-b054-4a9c-a77f-da42a4009365", + TimeZone = "Europe/Amsterdam" + }); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkExchange", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CalendarEventId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("IsSet") + .HasColumnType("boolean"); + + b.Property("VehicleId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("LinkExchange"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkUserDayItem", b => + { + b.Property("DayItemId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("CalendarEventId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.HasKey("DayItemId", "UserId"); + + b.HasIndex("UserId"); + + b.ToTable("LinkUserDayItems"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkUserUser", b => + { + b.Property("UserAId") + .HasColumnType("uuid"); + + b.Property("UserBId") + .HasColumnType("uuid"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("LinkType") + .HasColumnType("integer"); + + b.HasKey("UserAId", "UserBId"); + + b.HasIndex("UserBId"); + + b.ToTable("LinkUserUsers"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkVehicleTraining", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("IsSelected") + .HasColumnType("boolean"); + + b.Property("RoosterTrainingId") + .HasColumnType("uuid"); + + b.Property("VehicleId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("RoosterTrainingId"); + + b.HasIndex("VehicleId"); + + b.ToTable("LinkVehicleTraining"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbPreComAlert", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Alert") + .HasColumnType("text"); + + b.Property("CustomerId") + .IsRequired() + .HasColumnType("uuid"); + + b.Property("Ip") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("Raw") + .HasColumnType("text"); + + b.Property("SendTime") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .IsRequired() + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("PreComAlert"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbPreComForward", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .IsRequired() + .HasColumnType("uuid"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("ForwardUrl") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("PreComForward"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Area") + .HasColumnType("text"); + + b.Property("Boat") + .HasColumnType("text"); + + b.Property("CallMadeBy") + .HasColumnType("text"); + + b.Property("Causes") + .HasColumnType("text"); + + b.Property("Commencement") + .HasColumnType("timestamp with time zone"); + + b.Property("Completedby") + .HasColumnType("text"); + + b.Property("CountAnimals") + .HasColumnType("double precision"); + + b.Property("CountSailors") + .HasColumnType("double precision"); + + b.Property("CountSaved") + .HasColumnType("double precision"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Date") + .HasColumnType("timestamp with time zone"); + + b.Property("Departure") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("End") + .HasColumnType("timestamp with time zone"); + + b.Property("ForTheBenefitOf") + .HasColumnType("text"); + + b.Property("FunctioningMaterial") + .HasColumnType("text"); + + b.Property("GolfHight") + .HasColumnType("double precision"); + + b.Property("Implications") + .HasColumnType("text"); + + b.Property("LastUpdated") + .HasColumnType("timestamp with time zone"); + + b.Property("Number") + .HasColumnType("double precision"); + + b.Property("OdataEtag") + .HasColumnType("text"); + + b.Property("Prio") + .HasColumnType("text"); + + b.Property("ProblemsWithWeed") + .HasColumnType("text"); + + b.Property("Request") + .HasColumnType("text"); + + b.Property("ShortDescription") + .HasColumnType("text"); + + b.Property("Sight") + .HasColumnType("integer"); + + b.Property("Start") + .HasColumnType("timestamp with time zone"); + + b.Property("Title") + .HasColumnType("text"); + + b.Property("TotalFullHours") + .HasColumnType("integer"); + + b.Property("TotalMinutes") + .HasColumnType("double precision"); + + b.Property("Type") + .HasColumnType("text"); + + b.Property("WaterTemperature") + .HasColumnType("double precision"); + + b.Property("WeatherCondition") + .HasColumnType("text"); + + b.Property("WindDirection") + .HasColumnType("text"); + + b.Property("WindPower") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("ReportActions"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportTraining", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Area") + .HasColumnType("text"); + + b.Property("Boat") + .HasColumnType("text"); + + b.Property("Commencement") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Date") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("End") + .HasColumnType("timestamp with time zone"); + + b.Property("FunctioningMaterial") + .HasColumnType("text"); + + b.Property("GolfHight") + .HasColumnType("double precision"); + + b.Property("LastUpdated") + .HasColumnType("timestamp with time zone"); + + b.Property("OdataEtag") + .HasColumnType("text"); + + b.Property("ProblemsWithWeed") + .HasColumnType("text"); + + b.Property("Sight") + .HasColumnType("integer"); + + b.Property("Start") + .HasColumnType("timestamp with time zone"); + + b.Property("Title") + .HasColumnType("text"); + + b.Property("TotalFullHours") + .HasColumnType("integer"); + + b.Property("TotalMinutes") + .HasColumnType("double precision"); + + b.Property("Type") + .HasColumnType("text"); + + b.Property("TypeTraining") + .HasColumnType("text"); + + b.Property("WaterTemperature") + .HasColumnType("double precision"); + + b.Property("WeatherCondition") + .HasColumnType("text"); + + b.Property("WindDirection") + .HasColumnType("text"); + + b.Property("WindPower") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("ReportTrainings"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("DbReportActionId") + .HasColumnType("uuid"); + + b.Property("DbReportTrainingId") + .HasColumnType("uuid"); + + b.Property("DrogeCodeId") + .HasColumnType("uuid"); + + b.Property("IsDeleted") + .HasColumnType("boolean"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("Role") + .HasColumnType("integer"); + + b.Property("SharePointID") + .HasMaxLength(10) + .HasColumnType("character varying(10)"); + + b.HasKey("Id"); + + b.HasIndex("DbReportActionId"); + + b.HasIndex("DbReportTrainingId"); + + b.ToTable("ReportUsers"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterAvailable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Assigned") + .HasColumnType("boolean"); + + b.Property("Available") + .HasColumnType("integer"); + + b.Property("CalendarEventId") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Date") + .HasColumnType("timestamp with time zone"); + + b.Property("LinkExchangeId") + .HasColumnType("uuid"); + + b.Property("SetBy") + .HasColumnType("integer"); + + b.Property("TrainingId") + .HasColumnType("uuid"); + + b.Property("UserFunctionId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("VehicleId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("LinkExchangeId"); + + b.HasIndex("TrainingId"); + + b.HasIndex("UserFunctionId"); + + b.HasIndex("UserId"); + + b.HasIndex("VehicleId"); + + b.ToTable("RoosterAvailable"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterDefault", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CountToTrainingTarget") + .HasColumnType("boolean"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("RoosterTrainingTypeId") + .HasColumnType("uuid"); + + b.Property("ShowTime") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("TimeEnd") + .HasColumnType("time without time zone"); + + b.Property("TimeStart") + .HasColumnType("time without time zone"); + + b.Property("TimeZone") + .IsRequired() + .HasColumnType("text"); + + b.Property("ValidFrom") + .HasColumnType("timestamp with time zone"); + + b.Property("ValidUntil") + .HasColumnType("timestamp with time zone"); + + b.Property>("VehicleIds") + .HasColumnType("uuid[]"); + + b.Property("WeekDay") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("RoosterTrainingTypeId"); + + b.ToTable("RoosterDefault"); + + b.HasData( + new + { + Id = new Guid("4142048e-82dc-4015-aab7-1b519da01238"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 10, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(21, 30, 0), + TimeStart = new TimeOnly(19, 30, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 1 + }, + new + { + Id = new Guid("7b4693a8-ae9c-430f-9119-49a6ecbfeb54"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 20, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(21, 30, 0), + TimeStart = new TimeOnly(19, 30, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 2 + }, + new + { + Id = new Guid("c1967b6b-1f3b-41d2-bfa4-361a71cd064c"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 30, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(21, 30, 0), + TimeStart = new TimeOnly(19, 30, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 3 + }, + new + { + Id = new Guid("b73bd006-0d29-4d4e-b71b-2c382d5f703f"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 40, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(21, 30, 0), + TimeStart = new TimeOnly(19, 30, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 4 + }, + new + { + Id = new Guid("860ec129-6b99-4286-b90a-a2d536377f7c"), + CountToTrainingTarget = false, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Name = "In overleg", + Order = 50, + RoosterTrainingTypeId = new Guid("52260d46-c748-4ffc-b94c-2baecacbfaf4"), + ShowTime = false, + TimeEnd = new TimeOnly(17, 30, 0), + TimeStart = new TimeOnly(15, 0, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2023, 9, 21, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 5 + }, + new + { + Id = new Guid("2bdaccc0-e9f7-40c1-ae76-d9ed66e4a978"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 60, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(13, 0, 0), + TimeStart = new TimeOnly(10, 0, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 6 + }, + new + { + Id = new Guid("348c82b5-ba0d-4d31-b242-2edc1dc669c7"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 70, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(16, 0, 0), + TimeStart = new TimeOnly(13, 0, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 6 + }, + new + { + Id = new Guid("015b9e42-e233-457e-bf26-de26c3a718ba"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 80, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(13, 0, 0), + TimeStart = new TimeOnly(10, 0, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 0 + }, + new + { + Id = new Guid("80d8ac0c-a2f7-4dc9-af57-a0ed74b7f8df"), + CountToTrainingTarget = true, + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Order = 90, + RoosterTrainingTypeId = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ShowTime = true, + TimeEnd = new TimeOnly(16, 0, 0), + TimeStart = new TimeOnly(13, 0, 0), + TimeZone = "Europe/Amsterdam", + ValidFrom = new DateTime(2022, 9, 4, 0, 0, 0, 0, DateTimeKind.Utc), + ValidUntil = new DateTime(2024, 6, 30, 23, 59, 59, 0, DateTimeKind.Utc), + WeekDay = 0 + }); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterItemDay", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DateEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("IsFullDay") + .HasColumnType("boolean"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("RoosterItemDay"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterItemMonth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Month") + .HasColumnType("smallint"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("Severity") + .HasColumnType("integer"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("Type") + .HasColumnType("integer"); + + b.Property("Year") + .HasColumnType("smallint"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("RoosterItemMonth"); + + b.HasData( + new + { + Id = new Guid("857e2ee9-8f2f-407e-9ec8-a0eaa853b957"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)1, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; GEEN", + Type = 1 + }, + new + { + Id = new Guid("d7d80ee0-0e73-426f-84b2-2040057c2f7a"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)1, + Order = 1, + Severity = 1, + Text = "Geen ingeroosterde oefeningen in verband met het winterseizoen", + Type = 1 + }, + new + { + Id = new Guid("5208deef-4529-4a30-a00e-22737cf52183"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)2, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Algemene kennis & Communicatie", + Type = 1 + }, + new + { + Id = new Guid("36e33dc3-8bb8-4096-a127-c3ee04a0e694"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)3, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; SAR & Hulpverlening", + Type = 1 + }, + new + { + Id = new Guid("01a17983-9bbe-4bfc-b152-f73c1869393d"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)4, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Veiligheid", + Type = 1 + }, + new + { + Id = new Guid("f9d140f0-58fa-4c9a-a845-0eb5bad2814f"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)5, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Navigatie", + Type = 1 + }, + new + { + Id = new Guid("4a009dd3-db02-4668-bbb0-9a9298c23d58"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)6, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; EHBO & Procedures", + Type = 1 + }, + new + { + Id = new Guid("e4c00e6b-14d5-4609-bff3-6a6533557a0b"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)7, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Techiek & Varen", + Type = 1 + }, + new + { + Id = new Guid("7696579c-403c-4a98-b30e-b19f1e90ffd0"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)7, + Order = 1, + Severity = 1, + Text = "Geen ingeroosterde oefeningen in verband met het hoogseizoen", + Type = 1 + }, + new + { + Id = new Guid("48045049-e9cb-4d86-8f34-85578f015f76"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)8, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; ntb", + Type = 1 + }, + new + { + Id = new Guid("4100bf4d-368e-47d1-b652-8fec191b4934"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)8, + Order = 1, + Severity = 1, + Text = "Geen ingeroosterde oefeningen in verband met het hoogseizoen", + Type = 1 + }, + new + { + Id = new Guid("532b68c3-328f-45a2-8a7e-fdf7f9eee111"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)9, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Algemene kennis", + Type = 1 + }, + new + { + Id = new Guid("40cbe7bc-4ed4-4897-8cb9-357785cb58c9"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)10, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Communicatie", + Type = 1 + }, + new + { + Id = new Guid("ca0fe95d-3b84-4136-bcee-ce080228c324"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)11, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; SAR en Hulpverlening", + Type = 1 + }, + new + { + Id = new Guid("b858e7fc-02ea-4a2a-a49d-f55c3a912c9c"), + CreatedBy = new Guid("00000000-0000-0000-0000-000000000000"), + CreatedOn = new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + Month = (short)12, + Order = 0, + Severity = 0, + Text = "KNRM Kompas onderwerp; Navigatie", + Type = 1 + }); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTraining", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CountToTrainingTarget") + .HasColumnType("boolean"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DateEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("DateStart") + .HasColumnType("timestamp with time zone"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)"); + + b.Property("IsLocked") + .HasColumnType("boolean"); + + b.Property("IsPinned") + .HasColumnType("boolean"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("RoosterDefaultId") + .HasColumnType("uuid"); + + b.Property("RoosterTrainingTypeId") + .HasColumnType("uuid"); + + b.Property("ShowTime") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("RoosterDefaultId"); + + b.HasIndex("RoosterTrainingTypeId"); + + b.ToTable("RoosterTraining"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTrainingType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ColorDark") + .HasColumnType("text"); + + b.Property("ColorLight") + .HasColumnType("text"); + + b.Property("CountToTrainingTarget") + .HasColumnType("boolean"); + + b.Property("CreatedBy") + .HasColumnType("uuid"); + + b.Property("CreatedDate") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDefault") + .HasColumnType("boolean"); + + b.Property("Name") + .HasColumnType("text"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("TextColorDark") + .HasColumnType("text"); + + b.Property("TextColorLight") + .HasColumnType("text"); + + b.Property("UpdatedBy") + .HasColumnType("uuid"); + + b.Property("UpdatedDate") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("RoosterTrainingType"); + + b.HasData( + new + { + Id = new Guid("7dd5bf75-aef4-4cdd-9515-112e9b51f2f0"), + ColorDark = "#ffffff4c", + ColorLight = "#bdbdbdff", + CountToTrainingTarget = true, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = true, + Name = "Kompas oefening", + Order = 10 + }, + new + { + Id = new Guid("80108015-87a7-4453-a1af-d81d15fe3582"), + ColorDark = "rgb(214,143,0)", + ColorLight = "rgb(214,129,0)", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "EHBO", + Order = 20 + }, + new + { + Id = new Guid("52260d46-c748-4ffc-b94c-2baecacbfaf4"), + ColorDark = "", + ColorLight = "rgb(25,169,140)", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "een op een", + Order = 30 + }, + new + { + Id = new Guid("137f2d85-8a4f-4407-ba78-d24ea1bcc181"), + ColorDark = "rgb(244,47,70)", + ColorLight = "rgb(242,28,13)", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Brandweer", + Order = 40, + TextColorDark = "#C0C0C0", + TextColorLight = "#FFFFFF" + }, + new + { + Id = new Guid("be12f5d9-b6f9-45d5-bd5f-6b74d7706a53"), + ColorDark = "rgb(13,222,156)", + ColorLight = "rgb(0,235,98)", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "HRB oefening", + Order = 50 + }, + new + { + Id = new Guid("6153a297-9486-43de-91e8-22d107da2b21"), + ColorDark = "#3BB9FF", + ColorLight = "#ADD8E6", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Evenement", + Order = 60 + }, + new + { + Id = new Guid("61646e7b-5257-4928-87fe-f1ac8ef1ef41"), + ColorDark = "#5f6138", + ColorLight = "#919454", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Techniek", + Order = 70 + }, + new + { + Id = new Guid("68be785c-1226-4280-a110-bd87f328951f"), + ColorLight = "#000000", + CountToTrainingTarget = false, + CreatedBy = new Guid("04093c7a-11e5-4887-af51-319ecc59efe0"), + CreatedDate = new DateTime(2023, 6, 26, 12, 12, 12, 0, DateTimeKind.Utc), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Proeve van Bekwaamheid", + Order = 80, + TextColorDark = "#C0C0C0", + TextColorLight = "#FFFFFF" + }); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserDefaultAvailable", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Assigned") + .HasColumnType("boolean"); + + b.Property("Available") + .HasColumnType("integer"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DefaultGroupId") + .HasColumnType("uuid"); + + b.Property("RoosterDefaultId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("ValidFrom") + .HasColumnType("timestamp with time zone"); + + b.Property("ValidUntil") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("DefaultGroupId"); + + b.HasIndex("RoosterDefaultId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDefaultAvailable"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserDefaultGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("IsDefault") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("ValidFrom") + .HasColumnType("timestamp with time zone"); + + b.Property("ValidUntil") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("UserDefaultGroup"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserFunctions", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDefault") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Order") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TrainingOnly") + .HasColumnType("boolean"); + + b.Property("TrainingTarget") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("UserFunctions"); + + b.HasData( + new + { + Id = new Guid("d23de705-d950-4833-8b94-aa531022d450"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Kompas leider", + Order = 10, + TrainingOnly = true, + TrainingTarget = 0 + }, + new + { + Id = new Guid("48db5dd5-cb72-4365-9bf5-959691dc54f2"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Schipper", + Order = 20, + RoleId = new Guid("f5b0bab6-6fdf-457d-855d-bbea6ea57bd5"), + TrainingOnly = false, + TrainingTarget = 2 + }, + new + { + Id = new Guid("cf6e6afa-8aa5-4b3d-8198-fb5e86faf53c"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Schipper I.O.", + Order = 30, + RoleId = new Guid("54aace50-0e1f-4c35-a1b3-87c9ff6bd743"), + TrainingOnly = false, + TrainingTarget = 2 + }, + new + { + Id = new Guid("35ad11b8-d3f2-4960-b1e8-d41aaccd188a"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Opstapper", + Order = 60, + RoleId = new Guid("afb45395-89ee-413d-9385-21962772dbda"), + TrainingOnly = false, + TrainingTarget = 2 + }, + new + { + Id = new Guid("feb3641f-9941-4db7-a202-14263d706516"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Aankomend opstapper", + Order = 70, + RoleId = new Guid("2197a054-e81f-4720-9f08-321377398cb6"), + TrainingOnly = false, + TrainingTarget = 2 + }, + new + { + Id = new Guid("322858f8-fd2c-4e62-b699-92c605adbbf2"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = true, + Name = "Opstapper op proef", + Order = 80, + RoleId = new Guid("2956c6f9-6b83-46eb-8890-dbb640fd5023"), + TrainingOnly = false, + TrainingTarget = 0 + }, + new + { + Id = new Guid("5c49fc5c-25eb-48c2-a746-74ac3a030d48"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "HRB Aankomend opstapper", + Order = 100, + RoleId = new Guid("f06a00e3-62c9-4ba5-baea-84a5ba10f53a"), + TrainingOnly = false, + TrainingTarget = 0 + }, + new + { + Id = new Guid("95427da1-e4d5-442e-962a-b04ab861a2c2"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Waarnemer", + Order = 180, + TrainingOnly = true, + TrainingTarget = 0 + }, + new + { + Id = new Guid("0a0a2c2d-15c7-4205-93a2-621de3c30db1"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Extra", + Order = 300, + TrainingOnly = false, + TrainingTarget = 0 + }, + new + { + Id = new Guid("a23f1f39-275e-4e21-901f-4878b73d3ede"), + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = false, + IsDefault = false, + Name = "Inactief", + Order = 400, + TrainingOnly = false, + TrainingTarget = 0 + }); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserHolidays", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Available") + .HasColumnType("integer"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("ValidFrom") + .HasColumnType("timestamp with time zone"); + + b.Property("ValidUntil") + .HasColumnType("timestamp with time zone"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("UserHolidays"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserLinkedMails", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Email") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("UserLinkedMails"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserOnVersion", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("LastSeenOnThisVersion") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("UserOnVersion"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserRoles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Accesses") + .HasMaxLength(500) + .HasColumnType("character varying(500)"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("ExternalId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Order") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("UserRoles"); + + b.HasData( + new + { + Id = new Guid("287359b1-2035-435b-97b0-eb260dc497d6"), + Accesses = "configure_training-types,users_settings,scheduler_dayitem,scheduler_monthitem,scheduler_history", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("287359b1-2035-435b-97b0-eb260dc497d6"), + Name = "Admin", + Order = 10 + }, + new + { + Id = new Guid("f6b0c571-9050-40d6-bf58-807981e5ed6e"), + Accesses = "scheduler,scheduler_table,scheduler_past,scheduler_dayitem,scheduler_other,scheduler_monthitem", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("f6b0c571-9050-40d6-bf58-807981e5ed6e"), + Name = "Scheduler", + Order = 20 + }, + new + { + Id = new Guid("90a40128-183f-408b-aa64-eb3b279a7042"), + Accesses = "scheduler_other", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("90a40128-183f-408b-aa64-eb3b279a7042"), + Name = "Basic scheduler", + Order = 30 + }, + new + { + Id = new Guid("d72ed2e9-911e-4ee5-b07e-cbd5917d432b"), + Accesses = "users_counter,users_details,full_training_history,full_action_history", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("d72ed2e9-911e-4ee5-b07e-cbd5917d432b"), + Name = "Users admin", + Order = 40 + }, + new + { + Id = new Guid("d526e5ed-e838-499d-a96c-62180db28bed"), + Accesses = "full_dashboard_statistics2", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("d526e5ed-e838-499d-a96c-62180db28bed"), + Name = "Beta user", + Order = 50 + }, + new + { + Id = new Guid("f5b0bab6-6fdf-457d-855d-bbea6ea57bd5"), + Accesses = "full_training_history,full_action_history,scheduler_other", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("f5b0bab6-6fdf-457d-855d-bbea6ea57bd5"), + Name = "schipper", + Order = 60 + }, + new + { + Id = new Guid("54aace50-0e1f-4c35-a1b3-87c9ff6bd743"), + Accesses = "full_training_history,full_action_history,scheduler_other", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("54aace50-0e1f-4c35-a1b3-87c9ff6bd743"), + Name = "schipper io", + Order = 70 + }, + new + { + Id = new Guid("afb45395-89ee-413d-9385-21962772dbda"), + Accesses = "full_training_history,full_action_history,scheduler_other", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("afb45395-89ee-413d-9385-21962772dbda"), + Name = "opstapper", + Order = 80 + }, + new + { + Id = new Guid("2197a054-e81f-4720-9f08-321377398cb6"), + Accesses = "full_training_history,full_action_history,scheduler_other", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("2197a054-e81f-4720-9f08-321377398cb6"), + Name = "aankomend opstapper", + Order = 90 + }, + new + { + Id = new Guid("f06a00e3-62c9-4ba5-baea-84a5ba10f53a"), + Accesses = "full_training_history,full_action_history", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("f06a00e3-62c9-4ba5-baea-84a5ba10f53a"), + Name = "hrb aankomend opstapper", + Order = 100 + }, + new + { + Id = new Guid("2956c6f9-6b83-46eb-8890-dbb640fd5023"), + Accesses = "", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExternalId = new Guid("2956c6f9-6b83-46eb-8890-dbb640fd5023"), + Name = "opstapper op proef", + Order = 110 + }); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserSettings", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("Setting") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Value") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("UserSettings"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreatedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("ExternalId") + .HasColumnType("uuid"); + + b.Property("LastLogin") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Nr") + .HasColumnType("integer"); + + b.Property("RoleFromSharePoint") + .HasColumnType("boolean"); + + b.Property("SharePointID") + .HasMaxLength(10) + .HasColumnType("character varying(10)"); + + b.Property("SyncedFromSharePoint") + .HasColumnType("boolean"); + + b.Property("UserFunctionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserFunctionId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbVehicles", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)"); + + b.Property("CreatedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Createdby") + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Deletedby") + .HasColumnType("uuid"); + + b.Property("ExchangeId") + .HasColumnType("uuid"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDefault") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("Order") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.ToTable("Vehicle"); + + b.HasData( + new + { + Id = new Guid("4589535c-9064-4448-bc01-3b5a00e9410d"), + Code = "NWI", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExchangeId = new Guid("dbaeaa44-d318-464e-ac39-f85029dd9e8f"), + IsActive = true, + IsDefault = true, + Name = "Nikolaas Wijsenbeek", + Order = 10 + }, + new + { + Id = new Guid("c759950b-8264-4521-9a6e-ff98ad358cc1"), + Code = "HZR", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + ExchangeId = new Guid("731fa301-d7cc-41de-9063-f86a32c2b25b"), + IsActive = true, + IsDefault = false, + Name = "De Huizer", + Order = 20 + }, + new + { + Id = new Guid("5777102a-3c9e-438e-a11f-fafb5f9649b6"), + Code = "HZN018", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Vlet", + Order = 30 + }, + new + { + Id = new Guid("d2b920a5-e8ec-4d47-a280-8f88eae914c1"), + Code = "Piet", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Pieter Houbolt", + Order = 40 + }, + new + { + Id = new Guid("f30d1856-2d26-441e-ae6d-935bb26c4852"), + Code = "Wal", + CustomerId = new Guid("d9754755-b054-4a9c-a77f-da42a4009365"), + IsActive = true, + IsDefault = false, + Name = "Wal", + Order = 100 + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.DataProtection.EntityFrameworkCore.DataProtectionKey", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("FriendlyName") + .HasColumnType("text"); + + b.Property("Xml") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.ToTable("DataProtectionKeys"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbAudit", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("Audits") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("Audits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomerSettings", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("CustomerSettings") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkExchange", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("LinkExchanges") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkUserDayItem", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterItemDay", "DayItem") + .WithMany("LinkUserDayItems") + .HasForeignKey("DayItemId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("LinkUserDayItems") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("DayItem"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkUserUser", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "UserA") + .WithMany("LinkedUserAsA") + .HasForeignKey("UserAId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "UserB") + .WithMany("LinkedUserAsB") + .HasForeignKey("UserBId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("UserA"); + + b.Navigation("UserB"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkVehicleTraining", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("LinkVehicleTrainings") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTraining", "RoosterTraining") + .WithMany("LinkVehicleTrainings") + .HasForeignKey("RoosterTrainingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbVehicles", "Vehicles") + .WithMany("LinkVehicleTrainings") + .HasForeignKey("VehicleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("RoosterTraining"); + + b.Navigation("Vehicles"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbPreComAlert", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("PreComAlerts") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("PreComAlerts") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbPreComForward", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("PreComForwards") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("PreComForwards") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportAction", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("ReportActions") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportTraining", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("ReportTrainings") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportUser", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportAction", "Action") + .WithMany("Users") + .HasForeignKey("DbReportActionId"); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportTraining", "Training") + .WithMany("Users") + .HasForeignKey("DbReportTrainingId"); + + b.Navigation("Action"); + + b.Navigation("Training"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterAvailable", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("RoosterAvailables") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkExchange", "LinkExchange") + .WithMany("RoosterAvailables") + .HasForeignKey("LinkExchangeId"); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTraining", "Training") + .WithMany("RoosterAvailables") + .HasForeignKey("TrainingId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserFunctions", "UserFunction") + .WithMany("RoosterAvailables") + .HasForeignKey("UserFunctionId"); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("RoosterAvailables") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbVehicles", "Vehicle") + .WithMany("RoosterAvailables") + .HasForeignKey("VehicleId"); + + b.Navigation("Customer"); + + b.Navigation("LinkExchange"); + + b.Navigation("Training"); + + b.Navigation("User"); + + b.Navigation("UserFunction"); + + b.Navigation("Vehicle"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterDefault", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("RoosterDefaults") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTrainingType", "RoosterTrainingType") + .WithMany("RoosterDefaults") + .HasForeignKey("RoosterTrainingTypeId"); + + b.Navigation("Customer"); + + b.Navigation("RoosterTrainingType"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterItemDay", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("RoosterItemDays") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterItemMonth", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("RoosterItemMonths") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTraining", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("RoosterTrainings") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterDefault", "RoosterDefault") + .WithMany("RoosterTrainings") + .HasForeignKey("RoosterDefaultId"); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTrainingType", "RoosterTrainingType") + .WithMany("RoosterTrainings") + .HasForeignKey("RoosterTrainingTypeId"); + + b.Navigation("Customer"); + + b.Navigation("RoosterDefault"); + + b.Navigation("RoosterTrainingType"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTrainingType", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("RoosterTrainingTypes") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserDefaultAvailable", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserDefaultAvailables") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserDefaultGroup", "DefaultGroup") + .WithMany("UserDefaultAvailables") + .HasForeignKey("DefaultGroupId"); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterDefault", "RoosterDefault") + .WithMany("UserDefaultAvailables") + .HasForeignKey("RoosterDefaultId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserDefaultAvailables") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("DefaultGroup"); + + b.Navigation("RoosterDefault"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserDefaultGroup", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserDefaultGroups") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserDefaultGroups") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserFunctions", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserFunctions") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserHolidays", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserHolidays") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserHolidays") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserLinkedMails", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserLinkedMails") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserLinkedMails") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserOnVersion", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserOnVersions") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserOnVersions") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserRoles", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserRoles") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserSettings", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserSettings") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserSettings") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("Users") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserFunctions", "UserFunction") + .WithMany("Users") + .HasForeignKey("UserFunctionId"); + + b.Navigation("Customer"); + + b.Navigation("UserFunction"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbVehicles", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("Vehicles") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", b => + { + b.Navigation("Audits"); + + b.Navigation("CustomerSettings"); + + b.Navigation("LinkExchanges"); + + b.Navigation("LinkVehicleTrainings"); + + b.Navigation("PreComAlerts"); + + b.Navigation("PreComForwards"); + + b.Navigation("ReportActions"); + + b.Navigation("ReportTrainings"); + + b.Navigation("RoosterAvailables"); + + b.Navigation("RoosterDefaults"); + + b.Navigation("RoosterItemDays"); + + b.Navigation("RoosterItemMonths"); + + b.Navigation("RoosterTrainingTypes"); + + b.Navigation("RoosterTrainings"); + + b.Navigation("UserDefaultAvailables"); + + b.Navigation("UserDefaultGroups"); + + b.Navigation("UserFunctions"); + + b.Navigation("UserHolidays"); + + b.Navigation("UserLinkedMails"); + + b.Navigation("UserOnVersions"); + + b.Navigation("UserRoles"); + + b.Navigation("UserSettings"); + + b.Navigation("Users"); + + b.Navigation("Vehicles"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbLinkExchange", b => + { + b.Navigation("RoosterAvailables"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportAction", b => + { + b.Navigation("Users"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbReportTraining", b => + { + b.Navigation("Users"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterDefault", b => + { + b.Navigation("RoosterTrainings"); + + b.Navigation("UserDefaultAvailables"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterItemDay", b => + { + b.Navigation("LinkUserDayItems"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTraining", b => + { + b.Navigation("LinkVehicleTrainings"); + + b.Navigation("RoosterAvailables"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbRoosterTrainingType", b => + { + b.Navigation("RoosterDefaults"); + + b.Navigation("RoosterTrainings"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserDefaultGroup", b => + { + b.Navigation("UserDefaultAvailables"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserFunctions", b => + { + b.Navigation("RoosterAvailables"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", b => + { + b.Navigation("Audits"); + + b.Navigation("LinkUserDayItems"); + + b.Navigation("LinkedUserAsA"); + + b.Navigation("LinkedUserAsB"); + + b.Navigation("PreComAlerts"); + + b.Navigation("PreComForwards"); + + b.Navigation("RoosterAvailables"); + + b.Navigation("UserDefaultAvailables"); + + b.Navigation("UserDefaultGroups"); + + b.Navigation("UserHolidays"); + + b.Navigation("UserLinkedMails"); + + b.Navigation("UserOnVersions"); + + b.Navigation("UserSettings"); + }); + + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbVehicles", b => + { + b.Navigation("LinkVehicleTrainings"); + + b.Navigation("RoosterAvailables"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/src/Server/Database/Migrations/20240921152744_AddUserExternalId.cs b/src/Server/Database/Migrations/20240921152744_AddUserExternalId.cs new file mode 100644 index 00000000..8abc44e8 --- /dev/null +++ b/src/Server/Database/Migrations/20240921152744_AddUserExternalId.cs @@ -0,0 +1,338 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace Drogecode.Knrm.Oefenrooster.Server.Database.Migrations +{ + /// + public partial class AddUserExternalId : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Name", + table: "Vehicle", + type: "character varying(30)", + maxLength: 30, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Code", + table: "Vehicle", + type: "character varying(10)", + maxLength: 10, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Value", + table: "UserSettings", + type: "character varying(30)", + maxLength: 30, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Setting", + table: "UserSettings", + type: "character varying(30)", + maxLength: 30, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "SharePointID", + table: "Users", + type: "character varying(10)", + maxLength: 10, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AddColumn( + name: "ExternalId", + table: "Users", + type: "uuid", + nullable: true); + + migrationBuilder.AlterColumn( + name: "Version", + table: "UserOnVersion", + type: "character varying(20)", + maxLength: 20, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Description", + table: "UserHolidays", + type: "character varying(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "UserDefaultGroup", + type: "character varying(30)", + maxLength: 30, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Text", + table: "RoosterItemMonth", + type: "character varying(150)", + maxLength: 150, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Text", + table: "RoosterItemDay", + type: "character varying(50)", + maxLength: 50, + nullable: false, + oldClrType: typeof(string), + oldType: "text"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "RoosterDefault", + type: "character varying(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "SharePointID", + table: "ReportUsers", + type: "character varying(10)", + maxLength: 10, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "ReportUsers", + type: "character varying(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CalendarEventId", + table: "LinkUserDayItems", + type: "character varying(200)", + maxLength: 200, + nullable: true, + oldClrType: typeof(string), + oldType: "text", + oldNullable: true); + + migrationBuilder.CreateTable( + name: "UserLinkedMails", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + CustomerId = table.Column(type: "uuid", nullable: false), + UserId = table.Column(type: "uuid", nullable: false), + Email = table.Column(type: "character varying(150)", maxLength: 150, nullable: true), + DeletedOn = table.Column(type: "timestamp with time zone", nullable: true), + DeletedBy = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_UserLinkedMails", x => x.Id); + table.ForeignKey( + name: "FK_UserLinkedMails_Customers_CustomerId", + column: x => x.CustomerId, + principalTable: "Customers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_UserLinkedMails_Users_UserId", + column: x => x.UserId, + principalTable: "Users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_UserLinkedMails_CustomerId", + table: "UserLinkedMails", + column: "CustomerId"); + + migrationBuilder.CreateIndex( + name: "IX_UserLinkedMails_UserId", + table: "UserLinkedMails", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "UserLinkedMails"); + + migrationBuilder.DropColumn( + name: "ExternalId", + table: "Users"); + + migrationBuilder.AlterColumn( + name: "Name", + table: "Vehicle", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(30)", + oldMaxLength: 30); + + migrationBuilder.AlterColumn( + name: "Code", + table: "Vehicle", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(10)", + oldMaxLength: 10); + + migrationBuilder.AlterColumn( + name: "Value", + table: "UserSettings", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(30)", + oldMaxLength: 30, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Setting", + table: "UserSettings", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(30)", + oldMaxLength: 30, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "SharePointID", + table: "Users", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(10)", + oldMaxLength: 10, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Version", + table: "UserOnVersion", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(20)", + oldMaxLength: 20); + + migrationBuilder.AlterColumn( + name: "Description", + table: "UserHolidays", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "UserDefaultGroup", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(30)", + oldMaxLength: 30); + + migrationBuilder.AlterColumn( + name: "Text", + table: "RoosterItemMonth", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(150)", + oldMaxLength: 150); + + migrationBuilder.AlterColumn( + name: "Text", + table: "RoosterItemDay", + type: "text", + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50); + + migrationBuilder.AlterColumn( + name: "Name", + table: "RoosterDefault", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "SharePointID", + table: "ReportUsers", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(10)", + oldMaxLength: 10, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "Name", + table: "ReportUsers", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(50)", + oldMaxLength: 50, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "CalendarEventId", + table: "LinkUserDayItems", + type: "text", + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(200)", + oldMaxLength: 200, + oldNullable: true); + } + } +} diff --git a/src/Server/Database/Migrations/DataContextModelSnapshot.cs b/src/Server/Database/Migrations/DataContextModelSnapshot.cs index 6d5326e8..81f1a42c 100644 --- a/src/Server/Database/Migrations/DataContextModelSnapshot.cs +++ b/src/Server/Database/Migrations/DataContextModelSnapshot.cs @@ -18,7 +18,7 @@ protected override void BuildModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder - .HasAnnotation("ProductVersion", "8.0.7") + .HasAnnotation("ProductVersion", "8.0.8") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -187,7 +187,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("CalendarEventId") - .HasColumnType("text"); + .HasMaxLength(200) + .HasColumnType("character varying(200)"); b.HasKey("DayItemId", "UserId"); @@ -546,7 +547,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("boolean"); b.Property("Name") - .HasColumnType("text"); + .HasMaxLength(50) + .HasColumnType("character varying(50)"); b.Property("Order") .HasColumnType("integer"); @@ -555,7 +557,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("integer"); b.Property("SharePointID") - .HasColumnType("text"); + .HasMaxLength(10) + .HasColumnType("character varying(10)"); b.HasKey("Id"); @@ -636,7 +639,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("Name") - .HasColumnType("text"); + .HasMaxLength(50) + .HasColumnType("character varying(50)"); b.Property("Order") .HasColumnType("integer"); @@ -850,7 +854,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Text") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(50) + .HasColumnType("character varying(50)"); b.Property("Type") .HasColumnType("integer"); @@ -894,7 +899,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Text") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(150) + .HasColumnType("character varying(150)"); b.Property("Type") .HasColumnType("integer"); @@ -1380,7 +1386,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Name") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(30) + .HasColumnType("character varying(30)"); b.Property("UserId") .HasColumnType("uuid"); @@ -1570,7 +1577,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("Description") - .HasColumnType("text"); + .HasMaxLength(50) + .HasColumnType("character varying(50)"); b.Property("UserId") .HasColumnType("uuid"); @@ -1590,6 +1598,37 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("UserHolidays"); }); + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserLinkedMails", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CustomerId") + .HasColumnType("uuid"); + + b.Property("DeletedBy") + .HasColumnType("uuid"); + + b.Property("DeletedOn") + .HasColumnType("timestamp with time zone"); + + b.Property("Email") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("CustomerId"); + + b.HasIndex("UserId"); + + b.ToTable("UserLinkedMails"); + }); + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserOnVersion", b => { b.Property("Id") @@ -1607,7 +1646,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Version") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(20) + .HasColumnType("character varying(20)"); b.HasKey("Id"); @@ -1759,13 +1799,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("uuid"); b.Property("Setting") - .HasColumnType("text"); + .HasMaxLength(30) + .HasColumnType("character varying(30)"); b.Property("UserId") .HasColumnType("uuid"); b.Property("Value") - .HasColumnType("text"); + .HasMaxLength(30) + .HasColumnType("character varying(30)"); b.HasKey("Id"); @@ -1799,6 +1841,9 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasMaxLength(150) .HasColumnType("character varying(150)"); + b.Property("ExternalId") + .HasColumnType("uuid"); + b.Property("LastLogin") .HasColumnType("timestamp with time zone"); @@ -1814,7 +1859,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) .HasColumnType("boolean"); b.Property("SharePointID") - .HasColumnType("text"); + .HasMaxLength(10) + .HasColumnType("character varying(10)"); b.Property("SyncedFromSharePoint") .HasColumnType("boolean"); @@ -1839,7 +1885,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Code") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(10) + .HasColumnType("character varying(10)"); b.Property("CreatedOn") .HasColumnType("timestamp with time zone"); @@ -1867,7 +1914,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Property("Name") .IsRequired() - .HasColumnType("text"); + .HasMaxLength(30) + .HasColumnType("character varying(30)"); b.Property("Order") .HasColumnType("integer"); @@ -2333,6 +2381,25 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("User"); }); + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserLinkedMails", b => + { + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") + .WithMany("UserLinkedMails") + .HasForeignKey("CustomerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUsers", "User") + .WithMany("UserLinkedMails") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Customer"); + + b.Navigation("User"); + }); + modelBuilder.Entity("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbUserOnVersion", b => { b.HasOne("Drogecode.Knrm.Oefenrooster.Server.Database.Models.DbCustomers", "Customer") @@ -2448,6 +2515,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("UserHolidays"); + b.Navigation("UserLinkedMails"); + b.Navigation("UserOnVersions"); b.Navigation("UserRoles"); @@ -2534,6 +2603,8 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.Navigation("UserHolidays"); + b.Navigation("UserLinkedMails"); + b.Navigation("UserOnVersions"); b.Navigation("UserSettings"); diff --git a/src/Server/Database/Models/DbCustomers.cs b/src/Server/Database/Models/DbCustomers.cs index 9f657e5d..9772fbfc 100644 --- a/src/Server/Database/Models/DbCustomers.cs +++ b/src/Server/Database/Models/DbCustomers.cs @@ -30,6 +30,7 @@ public class DbCustomers public ICollection? UserHolidays { get; set; } public ICollection? UserOnVersions { get; set; } public ICollection? UserSettings { get; set; } + public ICollection? UserLinkedMails { get; set; } public ICollection? RoosterAvailables { get; set; } public ICollection? RoosterDefaults { get; set; } public ICollection? RoosterItemDays { get; set; } diff --git a/src/Server/Database/Models/DbLinkUserDayItem.cs b/src/Server/Database/Models/DbLinkUserDayItem.cs index 862211e0..6c9d18cc 100644 --- a/src/Server/Database/Models/DbLinkUserDayItem.cs +++ b/src/Server/Database/Models/DbLinkUserDayItem.cs @@ -1,4 +1,5 @@ -using Microsoft.Graph.Models.Security; +using System.ComponentModel.DataAnnotations; +using Microsoft.Graph.Models.Security; using Microsoft.Graph.Models; namespace Drogecode.Knrm.Oefenrooster.Server.Database.Models @@ -7,7 +8,7 @@ public class DbLinkUserDayItem { public Guid UserId { get; set; } public Guid DayItemId { get; set; } - public string? CalendarEventId { get; set; } + [StringLength(200)] public string? CalendarEventId { get; set; } public DbUsers User { get; set; } = null!; public DbRoosterItemDay DayItem { get; set; } = null!; } diff --git a/src/Server/Database/Models/DbPreComAlert.cs b/src/Server/Database/Models/DbPreComAlert.cs index addc27db..b85246e6 100644 --- a/src/Server/Database/Models/DbPreComAlert.cs +++ b/src/Server/Database/Models/DbPreComAlert.cs @@ -9,10 +9,12 @@ public class DbPreComAlert [Key] public Guid Id { get; set; } public Guid? UserId { get; set; } public Guid? CustomerId { get; set; } + // ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength public string? Alert { get; set; } /// /// Only to complete the object, not all fields are always returned. /// + // ReSharper disable once EntityFramework.ModelValidation.UnlimitedStringLength public string? Raw { get; set; } [StringLength(50)] public string? Ip { get; set; } public DateTime? SendTime { get; set; } diff --git a/src/Server/Database/Models/DbReportUser.cs b/src/Server/Database/Models/DbReportUser.cs index 5e105178..c97eb369 100644 --- a/src/Server/Database/Models/DbReportUser.cs +++ b/src/Server/Database/Models/DbReportUser.cs @@ -8,9 +8,9 @@ public class DbReportUser [Key] public Guid Id { get; set; } public Guid? DbReportActionId { get; set; } public Guid? DbReportTrainingId { get; set; } - public string? SharePointID { get; set; } + [StringLength(10)] public string? SharePointID { get; set; } public Guid? DrogeCodeId { get; set; } - public string? Name { get; set; } + [StringLength(50)] public string? Name { get; set; } public SharePointRole Role { get; set; } public bool IsDeleted { get; set; } public int Order { get; set; } diff --git a/src/Server/Database/Models/DbRoosterDefault.cs b/src/Server/Database/Models/DbRoosterDefault.cs index 56c66dcc..53c43bfa 100644 --- a/src/Server/Database/Models/DbRoosterDefault.cs +++ b/src/Server/Database/Models/DbRoosterDefault.cs @@ -10,7 +10,7 @@ public class DbRoosterDefault public Guid CustomerId { get; set; } public Guid? RoosterTrainingTypeId { get; set; } public List? VehicleIds { get; set; } - public string? Name { get; set; } + [StringLength(50)] public string? Name { get; set; } public DayOfWeek WeekDay { get; set; } public TimeOnly TimeStart { get; set; } public TimeOnly TimeEnd { get; set; } diff --git a/src/Server/Database/Models/DbRoosterItemDay.cs b/src/Server/Database/Models/DbRoosterItemDay.cs index 819c8267..4eb451cc 100644 --- a/src/Server/Database/Models/DbRoosterItemDay.cs +++ b/src/Server/Database/Models/DbRoosterItemDay.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using Drogecode.Knrm.Oefenrooster.Shared.Helpers; namespace Drogecode.Knrm.Oefenrooster.Server.Database.Models; @@ -11,7 +12,7 @@ public class DbRoosterItemDay public DateTime? DateEnd { get; set; } public bool IsFullDay { get; set; } public CalendarItemType Type { get; set; } - public string Text { get; set; } = string.Empty; + [StringLength(DefaultSettingsHelper.MAX_LENGTH_DAY_ITEM_TEXT)] public string Text { get; set; } = string.Empty; public Guid CustomerId { get; set; } public DateTime CreatedOn { get; set; } public Guid CreatedBy { get; set; } diff --git a/src/Server/Database/Models/DbRoosterTraining.cs b/src/Server/Database/Models/DbRoosterTraining.cs index 75d15ce7..c0f9f458 100644 --- a/src/Server/Database/Models/DbRoosterTraining.cs +++ b/src/Server/Database/Models/DbRoosterTraining.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using Drogecode.Knrm.Oefenrooster.Shared.Helpers; namespace Drogecode.Knrm.Oefenrooster.Server.Database.Models; @@ -10,8 +11,8 @@ public class DbRoosterTraining public Guid CustomerId { get; set; } public Guid? RoosterDefaultId { get; set; } public Guid? RoosterTrainingTypeId { get; set; } - [StringLength(50)] public string? Name { get; set; } - [StringLength(1000)] public string? Description { get; set; } + [StringLength(DefaultSettingsHelper.MAX_LENGTH_TRAINING_TITLE)] public string? Name { get; set; } + [StringLength(DefaultSettingsHelper.MAX_LENGTH_TRAINING_DESCRIPTION)] public string? Description { get; set; } public DateTime DateStart { get; set; } public DateTime DateEnd { get; set; } public DateTime? DeletedOn { get; set; } diff --git a/src/Server/Database/Models/DbUserDefaultGroup.cs b/src/Server/Database/Models/DbUserDefaultGroup.cs index 09ec7844..0efe03b7 100644 --- a/src/Server/Database/Models/DbUserDefaultGroup.cs +++ b/src/Server/Database/Models/DbUserDefaultGroup.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using Drogecode.Knrm.Oefenrooster.Shared.Helpers; namespace Drogecode.Knrm.Oefenrooster.Server.Database.Models; @@ -9,7 +10,7 @@ public class DbUserDefaultGroup [Key] public Guid Id { get; set; } public Guid UserId { get; set; } public Guid CustomerId { get; set; } - public string Name { get; set; } = ""; + [StringLength(DefaultSettingsHelper.MAX_LENGTH_TRAINING_GROUP_NAME)] public string Name { get; set; } = ""; public DateTime? ValidFrom { get; set; } public DateTime? ValidUntil { get; set; } public bool IsDefault { get; set; } = false; diff --git a/src/Server/Database/Models/DbUserHolidays.cs b/src/Server/Database/Models/DbUserHolidays.cs index 14e5f7b3..ed3fd37e 100644 --- a/src/Server/Database/Models/DbUserHolidays.cs +++ b/src/Server/Database/Models/DbUserHolidays.cs @@ -1,5 +1,6 @@ using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; +using Drogecode.Knrm.Oefenrooster.Shared.Helpers; namespace Drogecode.Knrm.Oefenrooster.Server.Database.Models; @@ -12,7 +13,7 @@ public class DbUserHolidays public Availability? Available { get; set; } public DateTime? ValidFrom { get; set; } public DateTime? ValidUntil { get; set; } - public string? Description { get; set; } + [StringLength(DefaultSettingsHelper.MAX_LENGTH_HOLIDAY_NAME)] public string? Description { get; set; } public DbCustomers Customer { get; set; } public DbUsers User { get; set; } diff --git a/src/Server/Database/Models/DbUserLinkedMails.cs b/src/Server/Database/Models/DbUserLinkedMails.cs new file mode 100644 index 00000000..4b4e5606 --- /dev/null +++ b/src/Server/Database/Models/DbUserLinkedMails.cs @@ -0,0 +1,18 @@ +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + +namespace Drogecode.Knrm.Oefenrooster.Server.Database.Models; + +[Table("UserLinkedMails")] +public class DbUserLinkedMails +{ + [Key] public Guid Id { get; set; } + public Guid CustomerId { get; set; } + public Guid UserId { get; set; } + [StringLength(150)] public string? Email { get; set; } + public DateTime? DeletedOn { get; set; } + public Guid? DeletedBy { get; set; } + + public DbCustomers Customer { get; set; } + public DbUsers? User { get; set; } +} \ No newline at end of file diff --git a/src/Server/Database/Models/DbUserOnVersion.cs b/src/Server/Database/Models/DbUserOnVersion.cs index 8553a3ce..1fe9b7f5 100644 --- a/src/Server/Database/Models/DbUserOnVersion.cs +++ b/src/Server/Database/Models/DbUserOnVersion.cs @@ -9,7 +9,7 @@ public class DbUserOnVersion [Key] public Guid Id { get; set; } public Guid UserId { get; set; } public Guid CustomerId { get; set; } - public string Version { get; set; } + [StringLength(20)] public string Version { get; set; } public DateTime LastSeenOnThisVersion { get; set; } public DbCustomers Customer { get; set; } diff --git a/src/Server/Database/Models/DbUserSettings.cs b/src/Server/Database/Models/DbUserSettings.cs index 69a90e7b..b02fb91e 100644 --- a/src/Server/Database/Models/DbUserSettings.cs +++ b/src/Server/Database/Models/DbUserSettings.cs @@ -9,8 +9,8 @@ public class DbUserSettings [Key] public Guid Id { get; set; } public Guid UserId { get; set; } public Guid CustomerId { get; set; } - public string? Setting { get; set; } - public string? Value { get; set; } + [StringLength(30)] public string? Setting { get; set; } + [StringLength(30)] public string? Value { get; set; } public DbCustomers Customer { get; set; } public DbUsers User { get; set; } diff --git a/src/Server/Database/Models/DbUsers.cs b/src/Server/Database/Models/DbUsers.cs index 8d271c4a..606c1c4d 100644 --- a/src/Server/Database/Models/DbUsers.cs +++ b/src/Server/Database/Models/DbUsers.cs @@ -8,6 +8,7 @@ public class DbUsers { [Key] public Guid Id { get; set; } public Guid CustomerId { get; set; } + public Guid? ExternalId { get; set; } public Guid? UserFunctionId { get; set; } [StringLength(50)] public string Name { get; set; } [StringLength(150)] public string Email { get; set; } @@ -16,7 +17,7 @@ public class DbUsers public DateTime LastLogin { get; set; } public DateTime? DeletedOn { get; set; } public Guid? DeletedBy { get; set; } - public string? SharePointID { get; set; } + [StringLength(10)] public string? SharePointID { get; set; } public bool SyncedFromSharePoint { get; set; } public bool RoleFromSharePoint { get; set; } @@ -36,5 +37,6 @@ public class DbUsers public ICollection? UserHolidays { get; set; } public ICollection? UserOnVersions { get; set; } public ICollection? UserSettings { get; set; } + public ICollection? UserLinkedMails { get; set; } public ICollection? Audits { get; set; } } \ No newline at end of file diff --git a/src/Server/Database/Models/DbVehicles.cs b/src/Server/Database/Models/DbVehicles.cs index 28baf90d..2077d549 100644 --- a/src/Server/Database/Models/DbVehicles.cs +++ b/src/Server/Database/Models/DbVehicles.cs @@ -9,8 +9,8 @@ public class DbVehicles [Key] public Guid Id { get; set; } public Guid CustomerId { get; set; } public Guid? ExchangeId { get; set; } - public string Name { get; set; } - public string Code { get; set; } + [StringLength(30)] public string Name { get; set; } + [StringLength(10)] public string Code { get; set; } public int Order { get; set; } public bool IsDefault { get; set; } public bool IsActive { get; set; } diff --git a/src/Server/Database/README.md b/src/Server/Database/README.md index 302295f0..27d82482 100644 --- a/src/Server/Database/README.md +++ b/src/Server/Database/README.md @@ -7,8 +7,8 @@ # Revert -1. dotnet ef database update "20240619080546_AddBetaUserRole" +1. dotnet ef database update "20240813190503_UserRoleExternalId" # Update tools: -1. dotnet tool update --global dotnet-ef --version 8.0.7 \ No newline at end of file +1. dotnet tool update --global dotnet-ef --version 8.0.8 \ No newline at end of file diff --git a/src/Server/Helpers/GraphHelper.cs b/src/Server/Helpers/GraphHelper.cs index fcf5a047..d1af542e 100644 --- a/src/Server/Helpers/GraphHelper.cs +++ b/src/Server/Helpers/GraphHelper.cs @@ -497,6 +497,7 @@ private static Event GenerateCalendarBody(string description, DateTime dateStart ContentType = BodyType.Html, Content = description, }, + //Attendees = [new Attendee() { EmailAddress = new EmailAddress() { Address = "debug-oefenrooster@drogecode.nl" } }], }; if (isAllDay) { diff --git a/src/Server/Mappers/UserRoleMapper.cs b/src/Server/Mappers/UserRoleMapper.cs index d68dedec..26278308 100644 --- a/src/Server/Mappers/UserRoleMapper.cs +++ b/src/Server/Mappers/UserRoleMapper.cs @@ -90,6 +90,9 @@ public static DrogeUserRole ToDrogeUserRole(this DbUserRoles dbUserRoles) case AccessesNames.AUTH_dashboard_qr: drogeUserRole.AUTH_dashboard_qr = true; break; + case AccessesNames.AUTH_mail_invite_external: + drogeUserRole.AUTH_mail_invite_external = true; + break; case AccessesNames.AUTH_show_c_footer: drogeUserRole.AUTH_show_c_footer = true; break; @@ -150,6 +153,8 @@ public static DbUserRoles ToDb(this DrogeUserRole userRole, Guid customerId) sb.Append(AccessesNames.AUTH_dashboard_holidays).Append(','); if (userRole.AUTH_dashboard_qr) sb.Append(AccessesNames.AUTH_dashboard_qr).Append(','); + if (userRole.AUTH_mail_invite_external) + sb.Append(AccessesNames.AUTH_mail_invite_external).Append(','); if (userRole.AUTH_show_c_footer) sb.Append(AccessesNames.AUTH_show_c_footer).Append(','); diff --git a/src/Server/Program.cs b/src/Server/Program.cs index 84c2d9d3..b19df0ba 100644 --- a/src/Server/Program.cs +++ b/src/Server/Program.cs @@ -130,6 +130,7 @@ "Schedule", "User", "UserRole", + "UserLinkedMails", "Vehicle", "SharePoint", "ReportAction", diff --git a/src/Server/Services/UserService.cs b/src/Server/Services/UserService.cs index 42ada83c..796b8eb9 100644 --- a/src/Server/Services/UserService.cs +++ b/src/Server/Services/UserService.cs @@ -62,6 +62,7 @@ public async Task GetAllUsers(Guid customerId, bool _database.Users.Add(new DbUsers { Id = userId, + ExternalId = userId, Name = userName, Email = userEmail, CreatedOn = DateTime.UtcNow, diff --git a/src/Shared/Authorization/AccessesNames.cs b/src/Shared/Authorization/AccessesNames.cs index ea9b2958..fc77868a 100644 --- a/src/Shared/Authorization/AccessesNames.cs +++ b/src/Shared/Authorization/AccessesNames.cs @@ -11,13 +11,12 @@ public struct AccessesNames public const string AUTH_Taco = "isSuperGlobalAdmin"; public const string AUTH_Hide = "do_not_show"; - public const string GROUP_CONFIGURATION= "Configuration"; public const string AUTH_configure_training_types = "configure_training-types"; public const string AUTH_configure_user_roles = "configure_user_roles"; public const string AUTH_configure_default_schedule = "configure_default_schedule"; - public const string GROUP_SCHEDULER = "scheduler"; + public const string GROUP_SCHEDULER = "Scheduler"; public const string AUTH_scheduler = "scheduler"; public const string AUTH_scheduler_in_table_view = "scheduler_table"; public const string AUTH_scheduler_history = "scheduler_history"; @@ -28,17 +27,20 @@ public struct AccessesNames public const string AUTH_scheduler_description_edit = "scheduler_description_edit"; public const string AUTH_scheduler_description_read = "scheduler_description_read"; - public const string GROUP_USER = "user"; + public const string GROUP_USER = "User"; public const string AUTH_users_details = "users_details"; public const string AUTH_users_counter = "users_counter"; public const string AUTH_users_settigns = "users_settings"; - public const string GROUP_DASHBOARD = "dashboard"; + public const string GROUP_DASHBOARD = "Dashboard"; public const string AUTH_action_history_full = "full_action_history"; public const string AUTH_training_history_full = "full_training_history"; public const string AUTH_dashboard_Statistics = "full_dashboard_statistics2"; public const string AUTH_dashboard_holidays = "dashboard_hol"; public const string AUTH_dashboard_qr = "dashboard_qr"; + + public const string GROUP_MAIL = "Mail"; + public const string AUTH_mail_invite_external = "mail_invite_external"; public const string GROUP_GLOBAL = "global"; public const string AUTH_show_c_footer = "showCfooter"; diff --git a/src/Shared/Helpers/DefaultSettingsHelper.cs b/src/Shared/Helpers/DefaultSettingsHelper.cs index 23d06f2a..8feb513c 100644 --- a/src/Shared/Helpers/DefaultSettingsHelper.cs +++ b/src/Shared/Helpers/DefaultSettingsHelper.cs @@ -27,4 +27,8 @@ public static class DefaultSettingsHelper public const int MAX_LENGTH_TRAINING_TITLE = 50; public const int MAX_LENGTH_TRAINING_DESCRIPTION = 1000; + public const int MAX_LENGTH_TRAINING_GROUP_NAME = 30; + public const int MAX_LENGTH_MONTH_ITEM_TEXT = 150; + public const int MAX_LENGTH_DAY_ITEM_TEXT = 50; + public const int MAX_LENGTH_HOLIDAY_NAME = 50; } diff --git a/src/Shared/Models/MonthItem/RoosterItemMonth.cs b/src/Shared/Models/MonthItem/RoosterItemMonth.cs index 1549e1b4..31ffc8ab 100644 --- a/src/Shared/Models/MonthItem/RoosterItemMonth.cs +++ b/src/Shared/Models/MonthItem/RoosterItemMonth.cs @@ -6,6 +6,7 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using Drogecode.Knrm.Oefenrooster.Shared.Helpers; namespace Drogecode.Knrm.Oefenrooster.Shared.Models.MonthItem; @@ -19,7 +20,7 @@ public class RoosterItemMonth : ICloneable public short? Year { get; set; } public CalendarItemType Type { get; set; } public Severity Severity { get; set; } - public string Text { get; set; } = string.Empty; + [StringLength(DefaultSettingsHelper.MAX_LENGTH_MONTH_ITEM_TEXT)] public string Text { get; set; } = string.Empty; public int Order { get; set; } public object Clone() diff --git a/src/Shared/Models/UserRole/DrogeUserRole.cs b/src/Shared/Models/UserRole/DrogeUserRole.cs index f807c582..a398c8eb 100644 --- a/src/Shared/Models/UserRole/DrogeUserRole.cs +++ b/src/Shared/Models/UserRole/DrogeUserRole.cs @@ -42,6 +42,9 @@ public class DrogeUserRole public bool AUTH_dashboard_holidays { get; set; } public bool AUTH_dashboard_qr { get; set; } + // Group: GROUP_MAIL + public bool AUTH_mail_invite_external { get; set; } + // Group: GROUP_GLOBAL public bool AUTH_show_c_footer { get; set; } }